MVC Valums Ajax Uploader - IE не отправляет поток в request.InputStream
Я использую Valums Ajax uploader. все отлично работает в Mozilla с помощью этого кода:
Вид:
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
});
Контроллер:
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
}
на который был дан ответ в этом сообщении:
Загрузка файла MVC3 Valums Ajax
Однако проблема заключается в том, что это не работает в IE. Я нашел это, но я не могу понять, как его реализовать:
IE не отправляет поток в "request.InputStream"... вместо этого получить входной поток через HttpPostedFileBase из Коллекция Request.Files []
Кроме того, здесь, который показывает, как этот парень это сделал, но я не уверен, как изменить для моего проекта:
Загрузка файла Valum - работает в Chrome, но не в IE, изображение img = Image.FromStream(Request.InputStream)
//This works with IE
HttpPostedFileBase httpPostedFileBase = Request.Files[0]
как HttpPostedFileBase;
не может понять это. пожалуйста помоги!
спасибо
Ответы
Ответ 1
Я понял это. Это работает в 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");
}
Ответ 2
Решение Shane работает, но похоже, что Request [ "qqfile" ] все равно установлен в IE. Не уверен, что это связано с тем, что я использую обновленную версию файлового загрузчика, но я изменил инструкцию if, чтобы она работала для IE (проверяя, есть ли в запросе какие-либо загруженные файлы).
if (Request.Files.Count > 0) {
//ie
} else {
//webkit and mozilla
}
Вот полный фрагмент
[HttpPost]
public ActionResult FileUpload(string qqfile)
{
var path = @"C:\\Temp\\100\\";
var file = string.Empty;
try
{
var stream = Request.InputStream;
if (Request.Files.Count > 0)
{
// 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");
}