使用AWS SDK ASP.NET将文件上载到S3

时间:2017-08-30 05:33:43

标签: asp.net amazon-web-services amazon-s3

我正在尝试将图像从ASP.NET上传到S3。我正在使用AWS SDK,并且已经设置了所需的内容。但是,在我运行我的项目后,我收到了一个错误。我将把我的桶名替换为......以获取此示例代码。

我在Web.config中设置了来自User的密钥和accesskey。请告诉我你是否需要更多代码。我需要帮助。

控制器

private static readonly string _awsAccessKey = ConfigurationManager.AppSettings["AWSAccessKey"];

private static readonly string _awsSecretKey = ConfigurationManager.AppSettings["AWSSecretKey"];

[HttpPost]  
        public ActionResult UploadFile(HttpPostedFileBase file)  
        {
            try  
            {
                if (file.ContentLength > 0)
                {

                    IAmazonS3 client;
                    using (client = Amazon.AWSClientFactory.CreateAmazonS3Client(_awsAccessKey, _awsSecretKey))
                    {
                        PutObjectRequest request = new PutObjectRequest
                        {
                            BucketName = "...",
                            CannedACL = S3CannedACL.PublicRead,
                            Key = "images/" + (DateTime.Now.ToBinary() + "-" + file.FileName),
                            FilePath = Server.MapPath("~/UploadedFiles")
                        };

                        client.PutObject(request);
                    }


                }

                imageUrls = "File Uploaded Successfully!!";
                System.Diagnostics.Debug.WriteLine("File Uploaded Successfully!!");

                return Json(imageUrls);
            }  
            catch  
            {  
                ViewBag.Message = "File upload failed!!";
                System.Diagnostics.Debug.WriteLine("File upload failed!!");
                return Json(ViewBag.Message);  
            }  
        }

2 个答案:

答案 0 :(得分:0)

由于DateTime.Now.ToBinary()包含要在网址中使用的无效字符而导致错误。例如,您可以使用GUID或Unix时间戳。

此外,您分配给FilePath的{​​{1}}属性是要上传的文件的完整路径和名称。因此,当您已将PutObjectRequest作为输入参数(包含HttpPostedFileBase属性(即流对象))时,您不需要它。

您的InputStream应该是这样的:

PutObjectRequest

答案 1 :(得分:0)

我终于解决了它。我意识到我没有将区域放在AWSClientFactory中,而是在密钥之后的最后。