使用FormData将字符串附加为文件上传

8
我想知道是否可以使用表单数据将字符串上传为文件。我相信应该有一些 File 对象,可以设置 valuefilename,也可能设置 mime-type
伪代码:
var file = new File();
file.name = "file.txt";
file.mimeType = "text/plain";
file.value = "blah blah\nsecond line";
var data = new FormData();
data.append(file);
3个回答

14

对我来说运行良好

const blob = new Blob(['blah blah\nsecond line'], {type : 'text/plain'})
formData.append('file', blob, 'file.txt')

0
对于任何来到这里并使用zag2art的答案但遇到错误“转换后的数据必须是字符串、ArrayBuffer、Buffer或Stream”,你需要安装“form-data”包并使用它来解决这个错误。
npm i --save form-data

然后你需要将文件名包装在一个选项对象中,对我来说,我不得不切换到Buffer而不是Blob,因为尽管理论上支持,但会引起新的错误。
import FormData = require('form-data');

...

const blob = Buffer.from('here is the text you want to upload', 'utf8');
const formData = new FormData();
formData.append('file', blob, {filename: 'file.txt'});

-8

确实有一个名为File的对象(在现代浏览器中),但由于安全问题,您无法创建它的新实例。因此,您所寻求的是不可能的。


2
OP想要做的是可能的。请参见下面zag2art的答案 - ipetrik
2
我不知道你是否尝试重现场景或测试代码,但这个答案不应该被标记为答案,因为@zag2art的解决方案显然有效,这表明现代浏览器确实允许在问题中所要求的操作。 - Zain Ul Abidin
@ipetrik 这个答案是在2013年发布的,当时据我所知是正确的。现在我们有了文件相关的API,因此我更改了接受的答案。 - Tomáš Zato

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