使用Internet Explore 6/9上传jQuery文件上载时,Request.Files为空

时间:2013-10-29 22:57:41

标签: c# jquery asp.net asp.net-mvc blueimp

每当我尝试在Internet Explore 6/9上使用Blueimp jQuery File Upload上传时,ASP.NET都无法在请求中找到这些文件。我有基本代码,看起来像

[HttpPost]
public JsonResult Images()
{
    HttpPostedFileBase file = Request.Files[0] as HttpPostedFileBase;
}

我的jQuery看起来像:

$('#fileupload').fileupload({
                    //forceIframeTransport: true,
                    //contentType: 'multipart/form-data',
                    //replaceFileInput: false,
                    //contentType: 'text/plain',
                    //dataType: 'text/plain',
                    url: '@Url.Action("Images", "Upload")',
                    //autoUpload: true,
                    done: function (e, data) {
                        $('.file_result').html('');
                        $('.file_result').append(data.result.text + "<br>");
                    }
                });

第一部分是它工作时,第二部分是我使用IE7-9时。 enter image description here

2 个答案:

答案 0 :(得分:12)

通常这种问题是由于不包括jquery.iframe-transport.js。

该插件为Microsoft Internet Explorer和Opera等浏览器使用了iframe传输模块,这些浏览器在早期版本中不支持XMLHTTPRequest文件上传。

我在您的代码中看到的另一个问题是,您未在JavaScript代码中设置contentTypedataType,而您的回复Content-type应为text/plain

在那里你可以找到2个工作实现供参考:

http://www.webtrendset.com/2011/06/22/complete-code-example-for-using-blueimp-jquery-file-upload-control-in-asp-net/

https://github.com/i-e-b/jQueryFileUpload.Net

答案 1 :(得分:0)

我遇到了与此问题相似的问题,所以希望该决议可以帮助某人:

我正在做的是将文件发送到WCF服务中的Web方法,然后将它们写入Web服务器上的文件夹。一切都在Firefox和Chrome中运行良好,但是对于IE(不幸的是我们需要支持IE),文件内容正在标题中发送,但没有写在服务器上。

当我查看Fiddler的流量时,最终发生的事情是当请求与IE一起发送时,HttpContext中的FileName属性为“C:\ somelocalclientfolder \ somefile.txt”请求。在Chrome和Firefox中,它只是“somefile.txt”。我在一些语句中添加了解析和提取文件名,并且poof,问题解决了。文件在IE,Chrome和Firefox中成功编写。

此外,正如其他人所提到的,如果请求是使用IE进行的,则需要将响应Content-Type设置为“text / plain”。 .NET有一些类将返回用于发出请求的浏览器类型,所以我只是使用它们来确定服务器端,如果IE正在发出请求,然后只将Content-Type设置为“text / plain”具体情况。