Загрузка файла MVC3 Valums Ajax

Я пытаюсь использовать valums ajax uploader. http://valums.com/ajax-upload/

На моей странице есть следующее:

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

он отправляет сообщение на мой controller, но qqfile всегда равен нулю. Я пробовал:

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

без везения.

Я нашел пример для rubyов на рельсах, но не уверен, как его реализовать в MVC http://www.jigsawboys.com/2010/10/06/ruby-on-rails-ajax-file-upload-with-valum/

В firebug я вижу это: http: // localhost: 61143 / Admin / Home / Upload? Qqfile = 2glonglonglongname + – + Copy.gif

введите описание изображения здесь

введите описание изображения здесьвведите описание изображения здесь

введите описание изображения здесь

Я понял. это работает в IE и 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"); } 

Этот компонент отправляет application/octet-stream вместо multipart/form-data которым может работать связующее устройство по умолчанию. Поэтому вы не можете ожидать, что Request.Files будет иметь какое-либо значение с таким запросом.

Вам нужно будет вручную прочитать stream запросов:

 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 загружается с использованием multipart-mime. Другие браузеры используют Octet-Stream.

Я написал обработчик загрузки для работы с Valums Ajax Uploader, который работает как с MVC & Webforms, так и с обоими методами. Я был бы рад поделиться с вами, если бы захотел. Он внимательно следит за обработчиком PHP.

Мой controller для обработки загрузки выглядит следующим образом:

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

UploadService выглядит так:

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

Ты должен попытаться:

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

Я развиваюсь в ASP.Net 4.0, но у нас нет архитектуры MVC. У меня была такая же проблема несколько дней назад. Но я понял это, и вот мое решение.

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

Теперь вы можете использовать obj для дальнейшей работы.

  • Razor рассматривает как шаблоны электронной почты
  • Как я могу использовать элемент управления reportviewer в виде бритвы asp.net mvc 3?
  • Неожиданное ключевое слово "foreach" после символа "@"
  • Как заставить MVC проверять объект IValidatableObject
  • Пользовательская проверка MVC: сравнить две даты
  • Как добавить дополнительные пространства имен в страницы Razor вместо @using объявления?
  • Есть ли веские основания использовать FormCollection вместо ViewModel?
  • Нестатический метод требует целевого
  • Как создать пользовательские шаблоны редактора / отображения в ASP.NET MVC 3?
  • Неверные формы MVC LoginUrl
  • Динамическая модель MVC Razor, «объект» не содержит определения для «PropertyName»,
  • Давайте будем гением компьютера.