请求标头在IE中不可用

时间:2012-05-31 06:51:32

标签: jquery ajax asp.net-mvc

我正在使用一个通过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

1 个答案:

答案 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做一个特殊情况。