ASP.NET MVC - Uploading an image to Amazon S3

99封情书 提交于 2019-12-30 02:08:33

问题


I have my image from Request.Files[0]. Now, how do I upload this image to S3? I see that in the AWS .NET API you have to specify ContentBody when putting an object which is a string. How would I get the content body of my file?


回答1:


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);



回答2:


Slightly more detail with how to use folders and to grant all users read-only access. 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);
            }

More detail is available here: http://bradoyler.com/post/3614362044/uploading-an-image-with-aws-sdk-for-net-c




回答3:


Most likely this is a Base64-encoded string, but you should check the S3 documentation to be sure. If it is, you should use Convert.ToBase64String() and pass it the byte array.

Here's some sample code you can try. I haven't tested it, but it should help you get the right idea:

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
}



回答4:


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

                YourS3client.PutObject(request);


来源:https://stackoverflow.com/questions/3781605/asp-net-mvc-uploading-an-image-to-amazon-s3

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!