How to upload large files using MVC 4?

asp.net-mvc, c#, file-upload, jquery, plupload

Solution

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>

Problem

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)); } ```

Original source

Related problems