ASP.NET MVC – il Caricamento di un’immagine di Amazon S3

Ho la mia immagine dalla Richiesta.File[0]. Ora, come faccio a caricare questa immagine per S3? Vedo che nel AWS .NET API, è necessario specificare ContentBody quando si inserisce un oggetto che è una stringa. Come posso ottenere il contenuto del corpo del mio file?

InformationsquelleAutor Matthew H | 2010-09-23

 

4 Replies
  1. 17
    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);
    • Grazie per il codice bit, cancella le cose anche per me.
  2. 11

    Leggermente più in dettaglio con l’utilizzo di cartelle e di concedere a tutti gli utenti l’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);
                }

    Ulteriori dettagli sono disponibili qui: http://bradoyler.com/post/3614362044/uploading-an-image-with-aws-sdk-for-net-c

    • Post del Blog è morto link.
  3. 1

    Molto probabilmente questa è una stringa con codifica Base64, ma si dovrebbe controllare l’S3 documentazione per essere sicuri. Se lo è, si dovrebbe utilizzare La conversione.ToBase64String() e passare l’array di byte.

    Ecco un esempio di codice che si può provare. Non ho testato, 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 è stato utilizzando il file.InputStream come l’InputStream, di proprietà di una PutObjectRequest oggetto. Grazie per il vostro aiuto!
  4. 0
                    PurObjectRequest request = new PutObjectRequest()
                    {
                        BucketName = _bucketName,
                        CannedACL = S3CannedACL.PublicRead,
                        Key =  string.Format("folderyouwanttoplacethefile/{0}", file.FileName),
                        InputStream = file.InputStream
                    };
    
                    YourS3client.PutObject(request);
    • Si prega di aggiungere qualche spiegazione su come funziona.

Lascia un commento