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

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

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

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

这很可能是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 } 
  PurObjectRequest request = new PutObjectRequest() { BucketName = _bucketName, CannedACL = S3CannedACL.PublicRead, Key = string.Format("folderyouwanttoplacethefile/{0}", file.FileName), InputStream = file.InputStream }; YourS3client.PutObject(request);