使用JavaScript将文件附加到input type="file"的方法

5

我需要通过POST方式将由JavaScript生成的文件(最多几MB)发送到服务器。

如何使用JavaScript将文件添加到input type="file"?根据Pre-Populate HTML form file input,由于安全原因似乎不可能。但是我在浏览器中创建文件,这不应该是安全问题。

我可以将文件作为文本粘贴到其他类型的输入框中。但我觉得这样做不正确。

这里的解决方案是什么?有没有办法将浏览器中的文件放入文件输入框?或者使用其他输入框可以吗?有没有一种方法可以将文件打包到POST请求中而不使用input元素?

我想要使用的工具:

$("#button").click(function(e) {
    $('#file').val(export_pdf());
    $('#form').submit();
});

2
可能是Pre-Populate HTML表单文件输入的重复问题。 - Liam
2
那个问题回答了你的问题。这是不可能的。再次问同样的问题并不会改变这个事实。 - Liam
1
请展示如何创建文件。 - Alex K.
1
@Liam 对不起,我认为另一个问题很明显是关于通过浏览器从计算机中获取文件的。但我谈论的是在浏览器中创建的文件,它根本没有涉及计算机文件存储,因此这是不同的问题。 - matousc
1
@Liam,让脚本发送自己生成的二进制数据与让脚本从用户文件系统中发送文件是非常不同的。 - JJJ
显示剩余2条评论
1个回答

3

虽然不能创建文件并将其附加到HTML表单输入中,但使用FormData对象,您可以将生成的文件作为POST请求的一部分发送到服务器。

来自MDN:

var formData = new FormData();

// JavaScript file-like object
var content = '<a id="a"><b id="b">hey!</b></a>'; // the body of the new file...
var blob = new Blob([content], { type: "text/xml"});

formData.append("webmasterfile", blob);

var request = new XMLHttpRequest();
request.open("POST", "http://foo.com/submitform.php");
request.send(formData);

这样就能得到与通过JS生成并发送到服务器的文件相同的结果。


1
您IP地址为143.198.54.68,由于运营成本限制,当前对于免费用户的使用频率限制为每个IP每72小时10次对话,如需解除限制,请点击左下角设置图标按钮(手机用户先点击左上角菜单按钮)。 - matousc
你可以使用 window.location.href = "url" 来重定向用户,我能想到的唯一另一个选项是将文件内容附加到隐藏元素的值上,但我从未使用过这样的方法,因此无法验证其效果如何。 - Justin MacArthur
但是使用window.location的解决方案会导致另一个请求。我需要实现的操作应该非常简单。两个请求不太好。 - matousc
2
很不幸,这就是网络安全的本质,我还没有遇到过任何方法可以让您使用脚本生成的数据填充表单文件上传系统。它是表单的只读属性。 - Justin MacArthur

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接