我正在使用一个通过Ajax上传图像的插件。这个插件的js源是here。
如果您看到从1200开始的行,您会注意到:
// build query string
params = params || {};
params['qqfile'] = name;
var queryString = qq.obj2url(params, this._options.action);
xhr.open("POST", queryString, true);
xhr.setRequestHeader("X-Requested-With", "XMLHttpRequest");
xhr.setRequestHeader("X-File-Name", encodeURIComponent(name));
xhr.setRequestHeader("Content-Type", "application/octet-stream");
xhr.send(file);
基本上,上传的文件名可用作qqfile
参数或者作为标题var:X-File-Name
。这两种方法都可以在FF / Chrome中使用此ASP.NET MVC代码完美地运行:
public JsonResult AjaxUpload(String qqfile)
{
String fileName = System.Web.HttpContext.Current.Request.Headers["x-file-name"];
//rest of the code
}
但在IE中,这些都不起作用...... Header var为空(在Debug中我清楚地看到此参数未发送),1qqfile
始终为"System.Web.HttpPostedFileWrapper"
。
有谁知道如何解决这个问题?
Ps:此插件的演示为here。
答案 0 :(得分:4)
我终于能够这样做了:
public JsonResult AjaxUpload(HttpPostedFileWrapper qqfile)
{
//IE
if (qqfile != null)
{
fileName = qqfile.FileName;
}
else
{
fileName = System.Web.HttpContext.Current.Request.Headers["x-file-name"];
}
//rest of the code
}
似乎在IE HttpPostedFileWrapper
中包含fileName和其他属性(而在其他浏览器中这是null
),非常奇怪,我必须为IE做一个特殊情况。