ASP.NET MVC - 将图像上传到Amazon S3

时间:2010-09-23 18:55:25

标签: c# asp.net asp.net-mvc-2 amazon-s3 asp.net-4.0

我有来自Request.Files [0]的图片。现在,如何将此图像上传到S3?我看到,在AWS .NET API中,您必须在放置一个字符串对象时指定ContentBody。我如何获得文件的内容正文?

4 个答案:

答案 0 :(得分: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);

答案 1 :(得分:11)

有关如何使用文件夹以及授予所有用户只读访问权限的详细信息。 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);
            }

此处提供了更多详细信息:http://bradoyler.com/post/3614362044/uploading-an-image-with-aws-sdk-for-net-c

答案 2 :(得分:1)

这很可能是Base64编码的字符串,但您应该检查S3文档以确定。如果是,则应使用Convert.ToBase64String()并将字节数组传递给它。

以下是您可以尝试的一些示例代码。我没有测试过它,但它应该可以帮助你找到正确的想法:

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
}

答案 3 :(得分:0)

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

                YourS3client.PutObject(request);