2010-09-23 16 views
11

Tengo mi imagen de Request.Files [0]. Ahora, ¿cómo cargo esta imagen en S3? Veo que en la API .NET de AWS debe especificar ContentBody al poner un objeto que es una cadena. ¿Cómo obtendré el contenido del cuerpo de mi archivo?ASP.NET MVC - Carga de una imagen en Amazon S3

Respuesta

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

Gracias por el código, también me aclara las cosas. – Chaddeus

1

Es muy probable que esta sea una cadena codificada en Base64, pero debe verificar la documentación de S3 para asegurarse. Si es así, debe usar Convert.ToBase64String() y pasarlo a la matriz de bytes.

Aquí hay un código de muestra que puedes probar. Yo no lo he probado, pero debería ayudarle a obtener la idea correcta:

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

eso no funcionó, pero lo que hizo el trabajo estaba usando file.InputStream como la propiedad de un InputStream Objeto PutObjectRequest. ¡Gracias por tu ayuda! –

11

poco más de detalle con el uso de carpetas y conceder a todos los usuarios acceso de sólo lectura. 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); 
      } 

más detalle está disponible aquí: http://bradoyler.com/post/3614362044/uploading-an-image-with-aws-sdk-for-net-c

+0

La publicación del blog es un enlace no válido. – 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

Agregue algunas explicaciones sobre cómo funciona esto. –