问题
您如何在 NodeJS 中完全通过 Streams 异步下载和(可恢复/多部分)上传大型 MP4 文件(不使用文件系统)?
场景
我正在编写一个类文件,该文件涉及纯粹通过内存从 URL 到 Google Drive 或 Dropbox 的流式下载。
**文件大小在下载和上传之前已知。
视觉
==============
^(5%) ^(10%)
Downloader
==============
^(5%) ^(10%)
Uploader
要求
- 通过内存流传输(不在文件系统上存储任何内容)
- 上传应该是多部分可恢复的,范围从 5 Mb 到 > 20 Gb。
- 如果下载或上传失败,应该有一定的重试次数。
好奇心
- 双工流(例如直通)是执行此操作的正确方法吗?
- 如上图所示,如何在异步方法中传递
Content-Length
?
伪代码
const axios = require('axios');
const stream = require('stream');
const passtrough = new stream.PassThrough();
let sample = VideoAPI.get() // pass id
//sample.url // url located here
//sample.size // size is known prior to download or upload
//sample.contentType // content-type is known prior to download
//Download sample via Axios
axios.get(sample.url, {
responseType: "stream"
}).then((response) => {
//TODO: Pipe to Google Drive
console.log('response', response)
}).catch((error) => {
console.error(error)
})
研究
最佳答案
我想你需要这样的东西:
request.get(sourceUrl).pipe(request.post(targetUrl))
在此方案中,数据将从sourceUrl 流向targetUrl,但不需要保存在服务器上的临时文件中。
有关说明,请访问 request#streaming
关于node.js - NodeJS异步下载和上传内存流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62508242/