2017-05-09 383 views
2

我想在.NET Core項目中使用Amazon S3上傳文件。有沒有關於如何創建和使用AmazonS3客戶端的參考?我在AmazonS3文檔中找到的所有.Net Core都是這樣(http://docs.aws.amazon.com/sdk-for-net/v3/developer-guide/net-dg-config-netcore.html),這不是非常有用。Amazon S3 .NET Core如何上傳文件

+0

@ LP13我已經看到了你的問題,所以我認爲你可以對我的問題有幫助。 – kostas

+0

關於如何上傳文件,你是什麼意思?上傳到AWS/S3的文件是相同的,與您使用哪種語言無關。它是一個Restful API,可以與純HTTP協同工作。因此,任何編程語言或環境中的任何Web客戶端都可以工作,甚至可以從命令行中捲曲。一個簡單的谷歌查詢結束了[這裏](http://docs.aws.amazon.com/AmazonS3/latest/dev/UploadObjSingleOpREST.html) – Tseng

+0

在.NET Framework中,它可以很好地處理AWSSDK。在.NET Core中,我應該將它安裝爲中間件,當我嘗試時,沒有任何工作正常。 – kostas

回答

2

每AWS SDK文檔,在2016年後期

https://aws.amazon.com/sdk-for-net/

所以指令增加了對文件上傳到S3應該是相同的爲.NET任何其他指令對.NET核心的支持。

getting started" guide for the AWS SDK for .Net實際上就是您描述的將文件連接並上傳到S3的情況 - 並且如果您安裝了」AWS Toolkit for Visual Studio「(它應該是。支持.Net AWS SDK)

安裝因此,所有你需要做的就是打開Visual Studio,發現其樣本S3的項目,或you can look at it here

  // simple object put 
      PutObjectRequest request = new PutObjectRequest() 
      { 
       ContentBody = "this is a test", 
       BucketName = bucketName, 
       Key = keyName 
      }; 

      PutObjectResponse response = client.PutObject(request); 

這裏假設你有實例化的Amazon.S3。 AmazonS3Client包含名稱空間後,並使用您自己的憑據配置它。

1

對於.netcore項目中的簡單文件上傳,我遵循以下link

完成簡單的文件上傳程序後,我按照thisthis鏈接的文檔,這些鏈接非常有幫助。以下兩個鏈接也有助於快速啓動。

  1. https://github.com/awslabs/aws-sdk-net-samples/blob/master/ConsoleSamples/AmazonS3Sample/AmazonS3Sample/S3Sample.cs

  2. http://www.c-sharpcorner.com/article/fileupload-to-aws-s3-using-asp-net/

這是在控制器中進行文件上傳我的最終代碼段(I跳過視圖部分,其在所述連桿精心解釋上述共享) 。

[HttpPost("UploadFiles")] 
public IActionResult UploadFiles(List<IFormFile> files) 
{ 
    long size = files.Sum(f => f.Length); 

    foreach (var formFile in files) 
    { 
      if (formFile.Length > 0) 
      { 
       var filename = ContentDispositionHeaderValue 
         .Parse(formFile.ContentDisposition) 
         .FileName 
         .TrimStart().ToString(); 
       filename = _hostingEnvironment.WebRootPath + [email protected]"\uploads" + [email protected]"\{formFile.FileName}"; 
       size += formFile.Length; 
       using (var fs = System.IO.File.Create(filename)) 
       { 
        formFile.CopyTo(fs); 
        fs.Flush(); 
       }//these code snippets saves the uploaded files to the project directory 

       uploadToS3(filename);//this is the method to upload saved file to S3 

      } 
     } 

     return RedirectToAction("Index", "Library"); 
} 

這是將文件上傳到亞馬遜S3的方法:

 private IHostingEnvironment _hostingEnvironment; 
     private AmazonS3Client _s3Client = new AmazonS3Client(RegionEndpoint.EUWest2); 
     private string _bucketName = "mis-pdf-library";//this is my Amazon Bucket name 
     private static string _bucketSubdirectory = String.Empty; 

     public UploadController(IHostingEnvironment environment) 
     { 
      _hostingEnvironment = environment; 
     } 


     public void uploadToS3(string filePath) 
     { 
      try 
      { 
       TransferUtility fileTransferUtility = new 
        TransferUtility(new AmazonS3Client(Amazon.RegionEndpoint.EUWest2)); 

       string bucketName; 


       if (_bucketSubdirectory == "" || _bucketSubdirectory == null) 
       { 
        bucketName = _bucketName; //no subdirectory just bucket name 
       } 
       else 
       { // subdirectory and bucket name 
        bucketName = _bucketName + @"/" + _bucketSubdirectory; 
       } 


       // 1. Upload a file, file name is used as the object key name. 
       fileTransferUtility.Upload(filePath, bucketName); 
       Console.WriteLine("Upload 1 completed"); 


      } 
      catch (AmazonS3Exception s3Exception) 
      { 
       Console.WriteLine(s3Exception.Message, 
            s3Exception.InnerException); 
      } 
     } 

這一切都是爲了在亞馬遜S3存儲桶上傳文件。我在.netcore 2.0上工作,並且不要忘記添加必要的依賴關係來使用Amazon API。它們是:

  1. AWSSDK.Core
  2. AWSSDK.Extensions.NETCore.Setup
  3. AWSSDK.S3

希望,這將有助於。