1

我正在使用一个通过 Ajax 上传图像的插件。这个插件的js源码在这里

如果您看到从 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参数或作为 Header var: 使用X-File-Name。使用此 ASP.NET MVC 代码,这两种方法都可以在 FF/Chrome 中完美运行:

public JsonResult AjaxUpload(String qqfile)
    {

        String fileName = System.Web.HttpContext.Current.Request.Headers["x-file-name"];
        //rest of the code
    }

但是在 IE 中,这些都不起作用...Header var 为 null(在 Debug 中我清楚地看到此参数未发送)并且1qqfile始终为"System.Web.HttpPostedFileWrapper".

有人知道如何为 IE 解决这个问题吗?

Ps:这个插件的Demo在这里

4

1 回答 1

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
  }

似乎在 IEHttpPostedFileWrapper中包含 fileName 和其他属性(而在其他浏览器中是null),很奇怪我必须为 IE 做一个特殊情况。

于 2012-05-31T08:46:11.940 回答