2011-08-12 9 views
7

¿Cómo uso AWS SDK para que ASP.NET cargue un archivo en una carpeta específica? - Pude subir archivos especificando el nombre del depósito (request.WithBucketName), pero quiero poder subir un archivo a una carpeta específica dentro del cubo.Cargar un archivo en la carpeta del contenedor S3 mediante el SDK de ASP.NET

Este es el código que utilizo para cargar un archivo en un solo cubo:

public bool UploadFileToS3(string uploadAsFileName, Stream ImageStream, S3CannedACL filePermission, S3StorageClass storageType, string toWhichBucketName) 
{ 

    try 
    { 
     client = Amazon.AWSClientFactory.CreateAmazonS3Client(MY_AWS_ACCESS_KEY_ID, MY_AWS_SECRET_KEY); 
     PutObjectRequest request = new PutObjectRequest(); 
     request.WithKey(uploadAsFileName); 
     request.WithInputStream(ImageStream); 
     request.WithBucketName(toWhichBucketName); 
     request.CannedACL = filePermission; 
     request.StorageClass = storageType; 

     client.PutObject(request); 
     client.Dispose(); 
    } 
    catch 
    {    
     return false; 
    } 
    return true; 

} 

la esperanza de que este código le ayudará a cabo.

+0

¿Puedes publicar tu código para subirlo al cubo? Eso nos ayudará, te ayudaremos con la parte de la carpeta. –

+0

actualizado con el código –

Respuesta

17

Para agregar un archivo a una carpeta en un depósito, debe actualizar la clave de PutObjectRequest para incluir la carpeta antes del nombre del archivo.

public bool UploadFileToS3(string uploadAsFileName, Stream ImageStream, S3CannedACL filePermission, S3StorageClass storageType, string toWhichBucketName) 
{ 
    try 
    { 
     using(client = Amazon.AWSClientFactory.CreateAmazonS3Client(MY_AWS_ACCESS_KEY_ID, MY_AWS_SECRET_KEY)) 
     { 
      PutObjectRequest request = new PutObjectRequest(); 
      request.WithKey("folder" + "/" + uploadAsFileName); 
      request.WithInputStream(ImageStream); 
      request.WithBucketName(toWhichBucketName); 
      request.CannedACL = filePermission; 
      request.StorageClass = storageType; 

      client.PutObject(request); 
     } 
    } 
    catch 
    {    
     return false; 
    } 
    return true; 
} 

This post que habla de la posibilidad de subir archivos a la carpeta. Sin embargo, están utilizando TransferUtilityUploadRequest, pero debería funcionar con PutObjectRequest. Desplácese hasta la parte inferior para ver el ejemplo relevante.

This post muestra cómo crear una carpeta sin cargar un archivo en ella.

la esperanza que esto sea útil

Editar: Actualizado el código para utilizar un bloque usando en lugar de llamar por Desechar las mejores prácticas.

+0

¿Cómo falló? ¿Puedes proporcionar mensajes de error o excepciones? –

+0

La ruta combinada no funcionó, pero FOLDER + "/" + UPLOADASFILENAME sí. Gracias. –

+0

necesito antes de cargar la imagen comprimida y luego de cargar la imagen, pero ¿cómo puedo hacer eso? No tengo idea. ¿Podrían por favor ayudarme? – coderwill

2

aspecto tienen Siguiendo functionlity

1.Create un objeto AmazonS3

2.Crear un cubo

3.Add un nuevo archivo a Amazon S3

4.Obtenga un archivo de Amazon S3

5.Eliminar un archivo de Amazon S3

Amazon

+0

+1 para el enlace a un buen artículo. – Jonny

2

manera muy fácil:

using System; 
using System.Web; 
using Amazon; 
using Amazon.S3; 
using Amazon.S3.Model; 
using System.Configuration; 

/// <summary> 
/// Summary description for AWShandler 
/// </summary> 
public static class AWSHandler 
{ 
    public static void sendFileToS3(string fileName, string storeLocation) 
    { 
     try 
     { 
      AmazonS3Client client = new AmazonS3Client(RegionEndpoint.EUWest1); 
      PutObjectRequest request = new PutObjectRequest(); 
      request.BucketName = ConfigurationManager.AppSettings["AWSBucket"].ToString(); 
      request.FilePath = fileName; 
      request.Key = storeLocation + fileName; 
      request.ContentType = MimeMapping.GetMimeMapping(fileName); 
      PutObjectResponse response = client.PutObject(request); 
     } 
     catch (Exception ex) 
     { 
      // use a logger and handle it 
     } 
    } 
} 

sólo tiene que poner las llaves en el archivo web/app.config:

<add key="AWSAccessKey" Value="yourKey" /> 
<add key="AWSSecretKey" Value="yourSecret" /> 

Estos pueden ser obtenidos a partir de su cuenta en la página Consola de AWS. También deben usar los nombres citados aquí, ya que están predefinidos por la biblioteca de AWS.

Cuestiones relacionadas