2008-09-22 45 views
26

Ứng dụng ASP.NET MVC của tôi sẽ mất rất nhiều băng thông và dung lượng lưu trữ. Làm thế nào tôi có thể thiết lập một trang tải lên ASP.NET để các tập tin người dùng tải lên sẽ đi thẳng đến Amazon S3 mà không cần sử dụng lưu trữ và băng thông của máy chủ web của tôi?Tải tệp trực tiếp lên Amazon S3 từ ứng dụng ASP.NET

Trả lời

25

Cập nhật tháng 2 năm 2016:

AWS SDK có thể xử lý nhiều hơn nữa ngay bây giờ. Hãy xem how to build the formhow to build the signature. Điều đó sẽ ngăn không cho bạn cần băng thông trên đầu của bạn, giả sử bạn không cần xử lý nội dung trước khi gửi nó đến S3.

+1

Nice !!! Thật khó để tìm thấy một số mẫu Amazon và đây là một trong những tôi chắc chắn có thể đã sử dụng một thời gian trước đây. Cảm ơn bạn. –

+4

Đây là năm sau nhưng tôi đã viết một [blog] (http://codeonaboat.wordpress.com/2011/04/22/uploading-a-file-to-amazon-s3-using-an-asp-net-mvc -ứng dụng-trực tiếp-từ-người-trình duyệt-/) về điều này như tôi gần đây đã phải thiết lập nó. – floatingfrisbee

+0

Xin chào, Liên kết không hoạt động ... – Learning

1

ThreeSharp là thư viện để tạo điều kiện tương tác với Amazon S3 trong môi trường .NET.

Bạn vẫn cần lưu trữ logic để tải lên và gửi tệp tới s3 trong ứng dụng mvc của mình, nhưng bạn sẽ không cần phải lưu chúng trên máy chủ của mình.

+4

ThreeSharp đang ngừng dự án của họ do những nỗ lực của Amazon. Đây là từ trang web của họ: "Chúng tôi khuyên các nhà phát triển di chuyển sang AWS SDK ngay khi thuận tiện nhất, vì chúng tôi sẽ không còn duy trì thư viện ThreeSharp nữa." – Stradas

+0

@ kyle, Điều này có nghĩa là AWS SDK đã tích hợp tính năng phát trực tuyến tệp AWS S3 xô ... – Learning

1

Tìm thư viện javascript để xử lý tải lên phía máy khách của các tệp này. Tôi stumbled khi một javascript và php example Dojo cũng dường như cung cấp một tập tin tải lên s3 clientide.

5

Nếu bạn cần tải lên các tệp lớn và hiển thị thanh tiến trình, bạn nên xem xét flajaxian component.

Sử dụng flash để tải tệp trực tiếp lên amazon s3, tiết kiệm băng thông của bạn.

+1

Flajaxian là tuyệt vời, tôi sử dụng nó trong sản xuất cho một vài năm. Nhưng gần đây nó đã trở thành lỗi trên hệ điều hành Mac do sự khác biệt tinh tế với thành phần Flash trên các thiết bị Mac. Tôi sẽ không còn đề nghị thành phần này để sử dụng sản xuất, các nhà phát triển đã từ bỏ hỗ trợ .. bạn chỉ cần nhìn vào tất cả các bài viết chưa được trả lời trên Codeplex. – QFDev

2

Cách tốt nhất và dễ nhất để tải tệp lên Amazon S3 qua asp.net. Hãy xem bài đăng blog sau của tôi. tôi nghĩ cái này sẽ giúp. Ở đây tôi đã giải thích từ việc thêm một thùng S3 để tạo Khóa API, Cài đặt Amazon SDK và viết mã để tải lên các tệp. Sau đây là mã mẫu để tải tệp lên amazon S3 với asp.net C#.

using System 
using System.Collections.Generic 
using System.Linq 
using System.Web 
using Amazon 
using Amazon.S3 
using Amazon.S3.Transfer 
/// 
/// Summary description for AmazonUploader 
/// 
public class AmazonUploader 
{ 
     public bool sendMyFileToS3(System.IO.Stream localFilePath, string bucketName, string subDirectoryInBucket, string fileNameInS3) 
     { 
     // input explained : 
     // localFilePath = we will use a file stream , instead of path 
     // bucketName : the name of the bucket in S3 ,the bucket should be already created 
     // subDirectoryInBucket : if this string is not empty the file will be uploaded to 
      // a subdirectory with this name 
     // fileNameInS3 = the file name in the S3 
    // create an instance of IAmazonS3 class ,in my case i choose RegionEndpoint.EUWest1 
    // you can change that to APNortheast1 , APSoutheast1 , APSoutheast2 , CNNorth1 
    // SAEast1 , USEast1 , USGovCloudWest1 , USWest1 , USWest2 . this choice will not 
    // store your file in a different cloud storage but (i think) it differ in performance 
    // depending on your location 


     IAmazonS3 client = new AmazonS3Client("Your Access Key", "Your Secrete Key", Amazon.RegionEndpoint.USWest2); 

    // create a TransferUtility instance passing it the IAmazonS3 created in the first step 
    TransferUtility utility = new TransferUtility(client); 
    // making a TransferUtilityUploadRequest instance 
    TransferUtilityUploadRequest request = new TransferUtilityUploadRequest(); 

    if (subDirectoryInBucket == "" || subDirectoryInBucket == null) 
    { 
     request.BucketName = bucketName; //no subdirectory just bucket name 
    } 
    else 
    { // subdirectory and bucket name 
     request.BucketName = bucketName + @"/" + subDirectoryInBucket; 
    } 
    request.Key = fileNameInS3 ; //file name up in S3 
    //request.FilePath = localFilePath; //local file name 
    request.InputStream = localFilePath; 
    request.CannedACL = S3CannedACL.PublicReadWrite; 
    utility.Upload(request); //commensing the transfer 

    return true; //indicate that the file was sent 
} 
} 

Tại đây bạn có thể sử dụng hàm sendMyFileToS3 để tải luồng tệp lên amazon S3. Để biết thêm chi tiết, hãy kiểm tra blog của tôi trong liên kết sau.

Upload File to Amazon S3 via asp.net

Tôi hy vọng liên kết được đề cập ở trên sẽ hữu ích.

+0

Mã của người giới thiệu giải pháp thanh toán này và tải trực tiếp lên Amazon s3 bucket ?. – Learning

+0

Có, nó tải trực tiếp lên thùng amazon S3 do bạn chỉ định. Bạn chỉ cần đặt thông tin xác thực API và tên nhóm nơi bạn muốn tải tệp lên. Phần còn lại sẽ được chăm sóc bởi mã.Nó được mô tả chi tiết trong bài đăng trên blog. –

Các vấn đề liên quan