我正在尝试将图像从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);
}
}
答案 0 :(得分:0)
由于DateTime.Now.ToBinary()
包含要在网址中使用的无效字符而导致错误。例如,您可以使用GUID或Unix时间戳。
此外,您分配给FilePath
的{{1}}属性是要上传的文件的完整路径和名称。因此,当您已将PutObjectRequest
作为输入参数(包含HttpPostedFileBase
属性(即流对象))时,您不需要它。
您的InputStream
应该是这样的:
PutObjectRequest
答案 1 :(得分:0)
我终于解决了它。我意识到我没有将区域放在AWSClientFactory中,而是在密钥之后的最后。