2009-03-28 47 views
19

Tôi cần một cách để tải lên các tệp lớn (600 mb đến 4 gb) trong trang web asp.net mvc. Hiện tại tôi đang sử dụng swfupload; nó hoạt động đủ tốt, nhưng nó là một hit lớn trên máy chủ web bởi vì nó sẽ gửi nó trong một tải lên lớn, cộng với tôi phải đặt nó trong web.config để cho phép một tệp lớn, đó là một nguy cơ bảo mật rất lớn. Trong quá khứ khi tôi đang phát triển biểu mẫu web, tôi đã sử dụng Neatupload để chia nhỏ tệp thành nhiều phần và tải lên từng tệp riêng lẻ. Tôi đang tìm kiếm một cách để tải lên các tệp lớn trong mvc mà tải lên thông qua chunking nó lên. Bất kỳ ý tưởng về cách tôi có thể làm điều này?Tải lên tệp lớn lên asp.net MVC

Trả lời

8
+0

Cảm ơn bạn đời, đây là những gì tôi đã tìm kiếm –

+1

Chỉ để mọi người ghé thăm điều này biết. Tôi đã sửa đổi nó một số và sử dụng nó ngay bây giờ. swfupload đã cho tôi quá nhiều vấn đề một khi các tập tin đã lên trên 1GB – Solmead

1

Bạn có thể làm điều gì đó tương tự như được mô tả trong this link không? Tôi không thấy lý do tại sao mà sẽ không làm việc trong ASP.NET MVC.

+0

URL đã chết cho tôi –

7

tôi đã kết thúc bằng Darren Johnstone's ASP.NET File Upload Module để xử lý các tải lên trên phía máy chủ. Mặc dù tôi đã sửa đổi nó một chút để nó có thể lấy một guid trên chuỗi truy vấn rằng nó sẽ lưu tệp tạm thời vào tên guid đó.

Thật tuyệt vì nó đã lưu tệp khi nó đến máy chủ và rút tệp ra khỏi dữ liệu đã đăng mà sau đó nó gửi đến tác vụ trên bộ điều khiển đã được chỉ định.

+0

Làm thế nào bạn có được nó để làm việc trong ASP.NET MVC mà không có điều khiển runat = máy chủ? Có điểm đấm trong các lớp còn lại không? Bạn có nhớ chia sẻ một mẫu mã không? –

+1

Mô-đun tải lên chứa 2 phần, tệp đầu tiên là một người tán thành khi một tệp được đăng (sử dụng mã hóa mime), nó sẽ lưu tệp trực tiếp khi nó đi và sau đó cho phép bất kỳ trang/bộ điều khiển nào được gọi, chỉ với mảng [] trống. Phần thứ hai là các điều khiển được sử dụng cho các biểu mẫu asp.net tiêu chuẩn. Tôi không sử dụng những điều khiển đó. Thay vào đó, tôi đã sử dụng swfupload mà tôi đã liên kết trong câu hỏi ban đầu, sử dụng js và flash để tải lên một tệp. Sau đó tôi đã có một cuộc gọi hành động "UploadAsync" trên một bộ điều khiển mà swfupload được cấu hình để đăng lên. – Solmead

+0

Bạn có thể chia sẻ mẫu mã không? Cảm ơn bạn –

2

Ví dụ trong quan điểm của tôi:

<input id="FileGUID" name="FileGUID" type="hidden" value="f632c00b-9b66-4716-8075-79df63b780fb" /> 
    <input type="file" id="FileUpload1" name="fileUpload1" /> 

    <script type="text/javascript"> 
     var UploadUrl = '/Video/AsyncUpload?FileGUID=f632c00b-9b66-4716-8075-79df63b780fb'; 
     $(function() { 
      $("#FileUpload1").makeAsyncUploader({ 
       upload_url: UploadUrl, 
       flash_url: '/Content/Flash/swfupload.swf', 
       button_image_url: '/Content/Images/blank-button.png', 
       button_text: '<font face="Helvetica, Arial" size="13pt" color="#ffffff">Upload File</font>', 
       disableDuringUpload: 'input[type="submit"]', 
       file_size_limit: '8024 MB', 
       button_text_top_padding: 2 
      }); 
     }); 
    </script> 

Sau đó, trong hành động tiết kiệm thực tế cho trang này, tôi tìm kiếm một tập tin mà hành động asyncupload đã có thể lưu các tập tin dựa trên FileGUID

1

Một SignalR thực hiện ví dụ có thể được tìm thấy here.

Điều này cũng bao gồm chức năng để làm việc với HttpContext.Request.GetBufferlessInputStream(), cho phép bạn bắt đầu làm việc với dữ liệu bài đăng trước khi nó được tải lên hoàn toàn.

+0

Liên kết bạn cung cấp đã chết. –

+0

Tôi đã thay thế liên kết – gb2d

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