tag route net for data asp all asp.net-mvc asp.net-mvc-2 plupload

route - ¿Cómo usar el paquete plupload con ASP.NET MVC?



select asp-for asp-items (2)

Estoy usando la versión de plupload 1.3.0

Más específicamente, ¿cómo debo definir mi acción de controlador para soportar fragmentación? ¿Puedo usar HttpPosteFileBase como parámetro?

En este momento estoy usando el siguiente código para inicializar el complemento

En la etiqueta HEAD

<link type="text/css" rel="Stylesheet" media="screen" href="<%: Url.Content( "~/_assets/css/plupload/jquery.ui.plupload.css" )%>" /> <link type="text/css" rel="Stylesheet" media="screen" href="<%: Url.Content( "~/_assets/css/plupload/gsl.plupload.css" )%>" /> <script type="text/javascript" src="<%: Url.Content( "~/_assets/js/plupload/gears_init.js" )%>"></script> <script type="text/javascript" src="<%: Url.Content( "~/_assets/js/plupload/plupload.full.min.js" )%>"></script> <script type="text/javascript" src="<%: Url.Content( "~/_assets/js/plupload/jquery.ui.plupload.min.js" )%>"></script>

En el documento listo

$("#uploader").pluploadQueue({ runtimes: ''html5,html4,gears,flash,silverlight'', url: ''<%: Url.Content( "~/Document/Upload" ) %>'', max_file_size: ''5mb'', chunk_size: ''1mb'', unique_names: true, filters: [ { title: "Documenti e Immagini", extensions: "doc,docx,xls,xlsx,pdf,jpg,png" } ], multiple_queues: false });


Mira aquí:

$("#uploader").pluploadQueue({ // General settings runtimes: ''silverlight'', url: ''/Home/Upload'', max_file_size: ''10mb'', chunk_size: ''1mb'', unique_names: true, multiple_queues: false, // Resize images on clientside if we can resize: { width: 320, height: 240, quality: 90 }, // Specify what files to browse for filters: [ { title: "Image files", extensions: "jpg,gif,png" }, { title: "Zip files", extensions: "zip" } ], // Silverlight settings silverlight_xap_url: ''../../../Scripts/upload/plupload.silverlight.xap'' }); // Client side form validation $(''form'').submit(function (e) { var uploader = $(''#uploader'').pluploadQueue(); // Files in queue upload them first if (uploader.files.length > 0) { // When all files are uploaded submit form uploader.bind(''StateChanged'', function () { if (uploader.files.length === (uploader.total.uploaded + uploader.total.failed)) { $(''form'')[0].submit(); } }); uploader.start(); } else { alert(''You must queue at least one file.''); } return false; });

Y en el controlador:

[HttpPost] public string Upload( ) { HttpPostedFileBase FileData = Request.Files[0]; if ( FileData.ContentLength > 0 ) { var fileName = Path.GetFileName( FileData.FileName ); var path = Path.Combine( Server.MapPath( "~/Content" ), fileName ); FileData.SaveAs( path ); } return "Files was uploaded successfully!"; }

Eso es todo ... No se necesita ningún trozo en Controller ...


Aqui tienes:

[HttpPost] public ActionResult Upload(int? chunk, string name) { var fileUpload = Request.Files[0]; var uploadPath = Server.MapPath("~/App_Data"); chunk = chunk ?? 0; using (var fs = new FileStream(Path.Combine(uploadPath, name), 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); } return Content("chunk uploaded", "text/plain"); }

Este método se llamará varias veces para cada fragmento y para cada archivo que se cargue. Pasará como parámetro el tamaño del fragmento y el nombre del archivo. No estoy seguro de si podría usar un HttpPostedFileBase como parámetro de acción porque el nombre no es determinista.