在带有空文件输入的 FF45 FormData 中没有设置 Content-Type
In FF45 FormData with empty file input didnt set Content-Type
当客户迁移到 FF 45 时,错误开始了。他们试图提交带有空文件输入的表单,但失败了。
我检测到,如果您通过 AJAX 和 FormData
提交表单,并且它有空文件输入 - FF 不会设置 Content-Type: application/octet-stream
我创建了最小的脚本来演示这个错误:
var fileInput = document.createElement('input');
fileInput.type = 'file';
fileInput.name = 'fileData';
var form = document.createElement('form');
form.method = 'post';
form.enctype = 'multipart/form-data';
form.appendChild(fileInput);
var xhr = new XMLHttpRequest();
xhr.open("POST", "/url");
xhr.send(new FormData(form));
我在 windows 上使用标准 FF45。
我没有找到关于此错误的任何信息,并使用 hack:在提交 id 之前删除空文件输入:
var fileInput = document.createElement('input');
fileInput.type = 'file';
fileInput.name = 'fileData';
var form = document.createElement('form');
form.method = 'post';
form.enctype = 'multipart/form-data';
form.appendChild(fileInput);
// Filter empty file inputs
var childNodes = form.querySelectorAll('input[type=file]');
for (var i=0;i<childNodes.length;i++) {
if (childNodes[i].files.length === 0) {
childNodes[i].parentElement.removeChild(childNodes[i]);
}
}
var xhr = new XMLHttpRequest();
xhr.open("POST", "/url");
xhr.send(new FormData(form));
当客户迁移到 FF 45 时,错误开始了。他们试图提交带有空文件输入的表单,但失败了。
我检测到,如果您通过 AJAX 和 FormData
提交表单,并且它有空文件输入 - FF 不会设置 Content-Type: application/octet-stream
我创建了最小的脚本来演示这个错误:
var fileInput = document.createElement('input');
fileInput.type = 'file';
fileInput.name = 'fileData';
var form = document.createElement('form');
form.method = 'post';
form.enctype = 'multipart/form-data';
form.appendChild(fileInput);
var xhr = new XMLHttpRequest();
xhr.open("POST", "/url");
xhr.send(new FormData(form));
我在 windows 上使用标准 FF45。
我没有找到关于此错误的任何信息,并使用 hack:在提交 id 之前删除空文件输入:
var fileInput = document.createElement('input');
fileInput.type = 'file';
fileInput.name = 'fileData';
var form = document.createElement('form');
form.method = 'post';
form.enctype = 'multipart/form-data';
form.appendChild(fileInput);
// Filter empty file inputs
var childNodes = form.querySelectorAll('input[type=file]');
for (var i=0;i<childNodes.length;i++) {
if (childNodes[i].files.length === 0) {
childNodes[i].parentElement.removeChild(childNodes[i]);
}
}
var xhr = new XMLHttpRequest();
xhr.open("POST", "/url");
xhr.send(new FormData(form));