Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to upload large files using MVC 4?

I had it working.. but I noticed once the files I was uploading get bigger (around 4000k) the controller would not be called..

So I added in chunking which fixed that problem.. but now when I open the file its full of garbage characters...

So what is the correct way to upload large files with plupload/MVC 4 ?

Here is my current code

  $(document).ready(function () {      var uploader = new plupload.Uploader({         runtimes: 'html5',         browse_button: 'pickfiles',         container: 'container',      //   max_file_size: '20000mb',         url: '@Url.Action("Upload", "Home")',         chunk_size: '4mb',         //filters: [         //    { title: "Excel files", extensions: "xls,xlsx" },         //    { title: "Text files", extensions: "txt" }         //],         multiple_queues: true,         multipart: true,         multipart_params: { taskId: '' }     }); 

and the controller

  [HttpPost]     public ActionResult Upload(int? chunk, string name, string taskId)     {         string filePath = "";         var fileUpload = Request.Files[0];         var uploadPath = Server.MapPath("~/App_Data/Uploads");         chunk = chunk ?? 0;         string uploadedFilePath = Path.Combine(uploadPath, name);         var fileName = Path.GetFileName(uploadedFilePath);   try         {             using (var fs = new FileStream(filePath, chunk == 0 ? FileMode.Create : FileMode.Append))             {                 var buffer = new byte[fileUpload.InputStream.Length];                 fileUpload.InputStream.Read(buffer, 0, buffer.Length);                 fs.Write(buffer, 0, buffer.Length);             }              //Log to DB for future processing             InstanceExpert.AddProcessStart(filePath, Int32.Parse(taskId));         } 
like image 819
punkouter Avatar asked Apr 29 '13 20:04

punkouter


1 Answers

In web.config you need these (2GB all around):

<system.web>     <compilation debug="true" targetFramework="4.5" />     <httpRuntime targetFramework="4.5" maxRequestLength="2147483647" executionTimeout="1600" requestLengthDiskThreshold="2147483647" />     <security>       <requestFiltering>         <requestLimits maxAllowedContentLength="2147483647" />       </requestFiltering>     </security>     ... </system.web> 
like image 134
ShaneKm Avatar answered Sep 23 '22 08:09

ShaneKm