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)); }
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>
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With