MVC3 Valums Ajax File Upload

J’essaye d’utiliser valums ajax uploader. http://valums.com/ajax-upload/

J’ai le suivant sur ma page:

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

il publie sur mon contrôleur mais qqfile est toujours nul. J’ai essayé ces:

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

sans chance.

J’ai trouvé un exemple pour ruby ​​sur les rails mais je ne sais pas comment le mettre en œuvre dans MVC http://www.jigsawboys.com/2010/10/06/ruby-on-rails-ajax-file-upload-with-valum/

Dans firebug je vois ceci: http: // localhost: 61143 / Admin / Home / Upload? Qqfile = 2glonglonglongname + – + Copy.gif

entrer la description de l'image ici

entrer la description de l'image icientrer la description de l'image ici

entrer la description de l'image ici

Je l’ai compris. cela fonctionne dans IE et Mozilla.

  [HttpPost] public ActionResult FileUpload(ssortingng qqfile) { var path = @"C:\\Temp\\100\\"; var file = ssortingng.Empty; try { var stream = Request.InputStream; if (Ssortingng.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"); } 

Ce composant envoie une application/octet-stream au lieu de multipart/form-data ce que le classeur par défaut peut utiliser. Vous ne pouvez donc pas vous attendre à ce que Request.Files ait une valeur avec une telle requête.

Vous devrez lire manuellement le stream de demande:

 public ActionResult Upload(ssortingng 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 télécharge en utilisant multipart-mime. D’autres navigateurs utilisent Octet-Stream.

J’ai écrit un gestionnaire de téléchargement pour travailler avec Valums Ajax Uploader qui fonctionne avec MVC & Webforms et les deux méthodes de téléchargement. Je serais heureux de partager avec vous si vous vouliez. Il suit de près le gestionnaire PHP.

Mon contrôleur pour gérer le téléchargement ressemble à ceci:

 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().ToSsortingng()); } 

Le UploadService ressemble à ceci:

 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 ............ 

Tu devrais essayer:

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

Je développe en ASP.Net 4.0 mais nous n’avons pas d’architecture MVC. J’ai eu le même problème il y a quelques jours. Mais j’ai compris et voici ma solution.

 //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); 

Maintenant, vous pouvez utiliser obj pour d’autres opérations.