2010-09-23 7 views

risposta

16
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); 
+0

Grazie per il bit di codice, chiarisce le cose anche per me. – Chaddeus

1

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 
} 
+0

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! –

11

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

+0

Il post sul blog è un link morto. – swbradshaw

0
   PurObjectRequest request = new PutObjectRequest() 
       { 
        BucketName = _bucketName, 
        CannedACL = S3CannedACL.PublicRead, 
        Key = string.Format("folderyouwanttoplacethefile/{0}", file.FileName), 
        InputStream = file.InputStream 
       }; 

       YourS3client.PutObject(request); 
+0

Aggiungi alcune spiegazioni su come funziona. –