2017-08-30 120 views
0

我想將圖像從ASP.NET上傳到S3。我正在使用AWS SDK,並且已經設置了所需的東西。但是,我運行我的項目後,我收到一個錯誤。對於此示例代碼,我將替換我的存儲桶名稱。使用AWS SDK將文件上傳到S3 ASP.NET

我在Web.config中設置了我的secretkey和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

@KhalidT。發生未處理的異常。異常類型:HttpException 異常消息:從客戶端(<)檢測到潛在危險的Request.Path值。 at System.Web.HttpRequest.ValidateInputIfRequiredByConfig() at System.Web.HttpApplication.PipelineStepManager.ValidateHelper(HttpContext上下文) – lel

回答

0

我終於解決了這個問題。我意識到我沒有在AWSClientFactory中放置區域,在按鍵後面的末尾。

0

你得到的錯誤,由於DateTime.Now.ToBinary()包含在URL中使用無效字符。例如,您可以使用GUID或Unix時間戳。

此外,您分配給PutObjectRequestFilePath屬性是要上載文件的完整路徑和名稱。所以,當你已經有HttpPostedFileBase作爲輸入參數時,你不需要它,它包含InputStream屬性(即流對象)。

PutObjectRequest應該是這個樣子:

. 
. 
. 
Guid guid = Guid.NewGuid(); 

// Create a client 
AmazonS3Client client = new AmazonS3Client(_awsAccessKey, _awsSecretKey); 

// Create a PutObject request 
PutObjectRequest request = new PutObjectRequest 
{ 
    BucketName = "...", 
    CannedACL = S3CannedACL.PublicRead, 
    Key = "images/" + guid + "-" + file.FileName 
}; 

using (System.IO.Stream inputStream = file.InputStream) 
{ 
    request.InputStream = inputStream; 

    // Put object 
    PutObjectResponse response = client.PutObject(request); 
} 
. 
. 
. 
+0

我有file.InputStream錯誤。不能將類型'System.IO.Stream'隱式轉換爲'System.IO.FileStream'。顯示轉換存在(你是否缺少一個轉換? – lel

+0

由於錯誤,我更改爲流而不是文件流運行它,它仍然失敗 – lel

+0

請參閱我更新的Unix時間戳和file.InputStream的答案 –