在带有空文件输入的 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));