2012-05-31 75 views
1

我正在使用插件通过Ajax上传图像。这个插件的js源代码是here请求标头在IE中不可用

如果你看到从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 /铬完美地工作与此ASP.NET MVC代码:

public JsonResult AjaxUpload(String qqfile) 
    { 

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

但在IE中,没有这些作品的?头var为空(在调试我清楚地看到,这个参数是未发送)和1qqfile始终为"System.Web.HttpPostedFileWrapper"

有谁知道如何解决这个问题?

ps:这个插件的演示是here

回答

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包含文件名和其他属性(而在其他的浏览器,这是null),很奇怪,我不得不这样做的特例为IE。

+0

干得好先生:)认为这将是一个头痛。您的解决方案适用于我。唯一的事情是qqFile.FileName获取我的完整路径,所以我不得不拆分出实际的文件名。 –

+0

哇...它的工作,thanx! –