Ho la mia immagine da Request.Files [0]. Ora, come posso caricare questa immagine su S3? Vedo che nell'API AWS .NET devi specificare ContentBody quando inserisci un oggetto che è una stringa. Come posso ottenere il contenuto del mio file?ASP.NET MVC - Caricamento di un'immagine su Amazon S3
risposta
var file = Request.Files[0];
PutObjectRequest request = new PutObjectRequest();
request.BucketName = "mybucket"
request.ContentType = contentType;
request.Key = key;
request.InputStream = file.InputStream;
s3Client.PutObject(request);
Molto probabilmente questo è una stringa con codifica Base64, ma si dovrebbe verificare la documentazione S3 per essere sicuri. Se lo è, dovresti usare Convert.ToBase64String() e passargli l'array di byte.
Ecco alcuni esempi di codice che è possibile provare. Non ho provato, ma dovrebbe aiutare a ottenere l'idea giusta:
if (Request.Files.Count >= 1) {
var file = Request.Files[0];
var fileContents = new byte[file.ContentLength];
file.InputStream.Read(fileContents, 0, file.ContentLength);
var fileBase64String = Convert.ToBase64String(fileContents);
// now you can send fileBase64String to the S3 uploader
}
che non ha funzionato, ma quello che ha fatto il lavoro stava usando file.InputStream come la proprietà di un InputStream Oggetto PutObjectRequest. Grazie per l'aiuto! –
Leggermente più in dettaglio con il modo di utilizzare le cartelle e per concedere a tutti gli utenti accesso in sola lettura. Html:
C#
HttpPostedFileBase file = Request.Files[0];
if (file.ContentLength > 0) // accept the file
{
string accessKey = "XXXXXXXXXXX";
string secretKey = "122334XXXXXXXXXX";
AmazonS3 client;
using (client = Amazon.AWSClientFactory.CreateAmazonS3Client(accessKey, secretKey))
{
MemoryStream ms = new MemoryStream();
PutObjectRequest request = new PutObjectRequest();
request.WithBucketName("mybucket")
.WithCannedACL(S3CannedACL.PublicRead)
.WithKey("testfolder/test.jpg").InputStream = file.InputStream;
S3Response response = client.PutObject(request);
}
Maggiori dettagli sono disponibili qui: http://bradoyler.com/post/3614362044/uploading-an-image-with-aws-sdk-for-net-c
Il post sul blog è un link morto. – swbradshaw
PurObjectRequest request = new PutObjectRequest()
{
BucketName = _bucketName,
CannedACL = S3CannedACL.PublicRead,
Key = string.Format("folderyouwanttoplacethefile/{0}", file.FileName),
InputStream = file.InputStream
};
YourS3client.PutObject(request);
Aggiungi alcune spiegazioni su come funziona. –
Grazie per il bit di codice, chiarisce le cose anche per me. – Chaddeus