如何将base64编码的文件添加到简单的javascript形式?

How to add base64 encoded files to simple javascript form?

我在一个对象中有 N 个 base64 格式的文件和一个像这样的简单形式:

var files = {
    'foo.pdf': 'JVBERi0xLjMKJcTl8u...',
    'bar.pdf': 'JVBERi0xLjUNCiWCiU...'
}

var form = document.createElement('form');
form.name = 'stupidInternetExplorerFixForm';
form.method = 'POST';
form.action = config.API_URL + '/foobar.pdf';

function appendField(key, value) {
   var tmp = document.createElement('input');
   tmp.type = 'HIDDEN';
   tmp.name = key;
   tmp.value = value;
   form.appendChild(tmp);
}

appendField('foo', 'foo');
appendField('bar', 'bar');
//appendField('files', files); -- HERE. What do I do here?

document.body.appendChild(form);
form.submit();

此表单将始终 return 一个文件。如何以编程方式将文件添加到我的表单中?这必须与 IE9 及更高版本一起使用。更改内容类型是可能的,但我想尽可能避免它。后端是 Java (Spring),各种诡计都没有问题。


编辑:Ajax文件下载目前不是一个选项,在尝试此方法之前已经尝试过了。基本上,我实际上是在为 ajax 文件下载创建一个后备选项,其中包含多个文件上传。 解决方案:将文件上传为动态文本字段而不是实际的真实文件。然后在后端再次将它们转换成文件。

您有多种可能性来完成您想要做的事情。

假设我们要继续按照您最初的想法以编程方式创建表单并动态添加隐藏输入。您可以重用您创建的现有函数来添加文件,因为您已经拥有字符串格式的文件。

for(var fileName in files){
  if(!files.hasOwnProperty(fileName)) continue;
  appendField(fileName, files[fileName]);
}

然后您可以发送包含所有文件的表单作为输入。