以iframe为目标的IE8 post文件以null形式到达服务器
我有一个表单,其中只有一个以iframe为目标的IE8 post文件以null形式到达服务器,iframe,file-upload,internet-explorer-8,Iframe,File Upload,Internet Explorer 8,我有一个表单,其中只有一个input:file,表单的目标是一个名为iframe。当用户选择一个文件时,它会自动将表单发布到服务器。这在IE10/firefox/chrome中有效,但在IE8中,当IE8发布表单时,我的控制器方法上的File参数为null。有没有其他人遇到过这种情况并知道任何解决方案,为什么IE8实际上没有发布文件数据 客户端: function createFileUploadForm() { var frameName = 'fileUploadFormFrame'
input:file
,表单的目标是一个名为iframe
。当用户选择一个文件时,它会自动将表单发布到服务器。这在IE10/firefox/chrome中有效,但在IE8中,当IE8发布表单时,我的控制器方法上的File参数为null。有没有其他人遇到过这种情况并知道任何解决方案,为什么IE8实际上没有发布文件数据
客户端:
function createFileUploadForm()
{
var frameName = 'fileUploadFormFrame';
var fileValue;
var fileUploadCallback = function()
{
//do stuff when the server responds after receiving the file
};
var fileInputChangedCallback = function(event)
{
if(fileInput.value != fileValue)
{
fileValue = fileInput.value;
form.submit();
}
};
var iFrame = document.createElement('iframe');
iFrame.name = frameName
document.body.appendChild(iFrame);
var form = document.createElement('form');
form.action = 'a/valid/url';
form.method = 'post';
form.enctype = 'multipart/form-data';
form.target = frameName;
var fileInput = document.createElement('input');
fileInput.type = 'file';
fileInput.name = 'File';
fileInput.accept = '.spc';
fileValue = fileInput.value;
//all browsers except IE8
//add event listener to fileInput onChange event -> fileInputChangedCallback
//IE8 fix
//add event listener to fileInput onFocus event -> fileInputChangedCallback
form.appendChild(fileInput);
document.body.appendChild(form);
}
服务器端:
[HttpPost]
public ActionResult UploadFile(HttpPostedFileBase File)
{
//do stuff with File, but in IE8 File parameter is null
}
问题是IE8需要在表单上设置一个额外的
编码属性:
var form = document.createElement('form');
form.action = 'a/valid/url';
form.method = 'post';
form.enctype = 'multipart/form-data';
form.encoding = 'multipart/form-data'; //this additional line fixes the IE8 problem I was having
form.target = frameName;
有趣的时间安排,因为我刚刚重建了一个使用iframe定位并支持IE8的文件管理器界面。你能发布一点你正在使用的代码吗?顺便说一句,在我的代码中,在上传完成后从DOM中删除iframe之前,我有一个250毫秒的暂停。它在控制台中是否给出任何错误?我希望这不是安全问题。感谢您添加客户端代码。这就是我要找的。我在任何时候都包含这样的编码,只是为了知道它是如何发送的。顺便说一句,我看到了+200奖金,但你已经提交了自己的答案,并将其标记为可接受的解决方案。赏金还有效吗?哈哈,不,赏金是为了加快得到答案的速度,但是一位同事在工作中发现了这个问题,所以应该真的交给他:P