MVC3 Valums Ajax Carga de archivos

Estoy tratando de usar valums ajax uploader. http://valums.com/ajax-upload/

Tengo lo siguiente en mi página:

var button = $('#fileUpload')[0]; var uploader = new qq.FileUploader({ element: button, allowedExtensions: ['jpg', 'jpeg', 'png', 'gif'], sizeLimit: 2147483647, // max size action: '/Admin/Home/Upload', multiple: false }); 

se publica en mi controlador, pero qqfile siempre es nulo. Intenté estos:

 public ActionResult Upload(HttpPostedFile qqfile) AND HttpPostedFileBase file = Request.Files["file"]; 

sin suerte

Encontré un ejemplo para ruby ​​on rails pero no estoy seguro de cómo implementarlo en MVC http://www.jigsawboys.com/2010/10/06/ruby-on-rails-ajax-file-upload-with-valum/

En firebug veo esto: http: // localhost: 61143 / Admin / Home / Upload? Qqfile = 2glonglonglongname + – + Copy.gif

enter image description here

enter image description hereenter image description here

enter image description here

Me lo imaginé. esto funciona en IE y Mozilla.

  [HttpPost] public ActionResult FileUpload(string qqfile) { var path = @"C:\\Temp\\100\\"; var file = string.Empty; try { var stream = Request.InputStream; if (String.IsNullOrEmpty(Request["qqfile"])) { // IE HttpPostedFileBase postedFile = Request.Files[0]; stream = postedFile.InputStream; file = Path.Combine(path, System.IO.Path.GetFileName(Request.Files[0].FileName)); } else { //Webkit, Mozilla file = Path.Combine(path, qqfile); } var buffer = new byte[stream.Length]; stream.Read(buffer, 0, buffer.Length); System.IO.File.WriteAllBytes(file, buffer); } catch (Exception ex) { return Json(new { success = false, message = ex.Message }, "application/json"); } return Json(new { success = true }, "text/html"); } 

Este componente envía una application/octet-stream lugar de multipart/form-data que es con lo que puede funcionar la carpeta de modelo predeterminada. Por lo tanto, no puede esperar que Request.Files tenga ningún valor con dicha solicitud.

Necesitará leer manualmente la secuencia de solicitud:

 public ActionResult Upload(string qqfile) { var stream = Request.InputStream; var buffer = new byte[stream.Length]; stream.Read(buffer, 0, buffer.Length); var path = Server.MapPath("~/App_Data"); var file = Path.Combine(path, qqfile); File.WriteAllBytes(file, buffer); // TODO: Return whatever the upload control expects as response } 

IE carga utilizando multipart-mime. Otros navegadores usan Octet-Stream.

Escribí un controlador de carga para trabajar con Valums Ajax Uploader que funciona con MVC y Webforms y con ambos métodos de carga. Estaría feliz de compartir con usted si quisiera. Sigue de cerca el manejador de PHP.

Mi controlador para manejar la carga se ve así:

 public class UploadController : Controller { private IUploadService _Service; public UploadController() : this(null) { } public UploadController(IUploadService service) { _Service = service ?? new UploadService(); } public ActionResult File() { return Content(_Service.Upload().ToString()); } 

El UploadService se ve así:

 public class UploadService : IUploadService { private readonly qq.FileUploader _Uploader; public UploadService() : this(null) { } public UploadService(IAccountService accountservice) { _Uploader = new qq.FileUploader(); } public UploadResult Upload() { qq.UploadResult result = _Uploader.HandleUpload(); if (!result.Success) return new UploadResult(result.Error); .... code ..... return new UploadResult((Guid)cmd.Parameters["@id"].Value); } catch (Exception ex) { return new UploadResult(System.Web.HttpUtility.HtmlEncode(ex.Message)); } finally { ............code......... } } ...............code ............ 

Deberías intentarlo:

 Stream inputStream = (context.Request.Files.Count > 0) ? context.Request.Files[0].InputStream : context.Request.InputStream; 

Estoy desarrollando en ASP.Net 4.0 pero no tenemos architecture MVC. Tuve el mismo problema hace unos días. Pero, lo descubrí y aquí está mi solución.

 //For IE Browser HttpPostedFile selectedfile = Request.Files[0]; System.Drawing.Bitmap obj = new System.Drawing.Bitmap(selectedfile.InputStream); //For Non IE Browser System.Drawing.Bitmap obj = new System.Drawing.Bitmap(Request.InputStream); 

Ahora puedes usar obj para más operaciones.