我有一个电子应用程序,它能够上传非常大的文件到服务器通过HTTP渲染过程中没有用户输入。我决定使用axios
作为我的HTTP客户端,它能够检索上传进度,但与此我遇到了一些问题。
浏览器支持的js和Node.js有时候并不友好,我使用fs.createReadStream
函数来获取文件,但是axios
不知道ReadStream
对象是什么,我无法将这个流传输到FormData
(我应该将文件放在FormData
中)(在GitHub的问题标签上有几个主题,但是到目前为止还没有做任何事情)。
我结束了使用fs.readFileSync
,然后form-data
模块与其getBuffer()
方法,但现在我的文件是完全加载在内存中上传之前,并与我的文件有多大,它杀死电子进程。
我在谷歌上找到了request
库,它实际上能够通过管道发送流请求,但它已经过时,不再受支持,显然我无法从中获得上传进度。
我的选项用完了。你如何上传文件与电子没有用户输入(所以没有文件输入)不加载他们在内存中的前期?
P.S.在form-data
github页面上,有一段代码解释了如何使用axios
上传文件流,但它不起作用,没有发送任何内容,并且将库降级为一个问题主题也没有帮助...
const form = new FormData();
const stream = fs.createReadStream(PATH_TO_FILE);
form.append('image', stream);
// In Node.js environment you need to set boundary in the header field 'Content-Type' by calling method `getHeaders`
const formHeaders = form.getHeaders();
axios.post('http://example.com', form, {
headers: {
...formHeaders,
},
})
.then(response => response)
.catch(error => error)
1条答案
按热度按时间xvw2m8pv1#
我能够解决这个问题,我希望它能帮助任何面临同样问题的人。
因为
request
已经过时了,我查找了替代品,找到了用于NodeJS HTTP请求的got.js,它支持Stream
,fs.ReadStream
等。你还需要form-data,它允许将流放入
FormData
中并将其分配给一个键。下面的代码解决了我的问题:
在电子渲染过程中完美的作品!