使用 formidable 将上传的文件流式传输到 s3
Streaming uploaded file to s3 using formidable
我知道这个问题已经被问过很多次了,但我仍然无法解决这个问题,
我正在使用 formidable 来解析传入的文件,而不是将文件存储在内存中,我想流式传输到 s3。
我的请求处理程序如下所示。
profile = async (req: Request) => {
const form = new IncomingForm();
form.onPart = (part: Part) => {
part.on("data", function(data){
// here calling s3 upload for each chunk
s3.upload({Body: data, Key: 'test.jpg'})
})
};
form.parse(req);
};
因为我为每个 chunk
调用 s3.upload
它会覆盖之前的数据块,所以我如何处理到 s3 的流?
我按照下面的方法解决了这个问题。
profile = async (req: Request) => {
const form = new IncomingForm();
const passThrough = new PassThrough();
const promise = s3.upload({Bucket: 'my-test-bucket', Key: 'unique.jpg', Body:
passThrough}).promise()
form.onPart = (part: Part) => {
part.on("data", function(data){
// pass chunk to passThrough
data.pipe(passThrough)
})
};
promise.then(uploadedData => console.log(uploadedData)).catch(err => console.log(err))
form.parse(req);
};
我知道这个问题已经被问过很多次了,但我仍然无法解决这个问题, 我正在使用 formidable 来解析传入的文件,而不是将文件存储在内存中,我想流式传输到 s3。
我的请求处理程序如下所示。
profile = async (req: Request) => {
const form = new IncomingForm();
form.onPart = (part: Part) => {
part.on("data", function(data){
// here calling s3 upload for each chunk
s3.upload({Body: data, Key: 'test.jpg'})
})
};
form.parse(req);
};
因为我为每个 chunk
调用 s3.upload
它会覆盖之前的数据块,所以我如何处理到 s3 的流?
我按照下面的方法解决了这个问题。
profile = async (req: Request) => {
const form = new IncomingForm();
const passThrough = new PassThrough();
const promise = s3.upload({Bucket: 'my-test-bucket', Key: 'unique.jpg', Body:
passThrough}).promise()
form.onPart = (part: Part) => {
part.on("data", function(data){
// pass chunk to passThrough
data.pipe(passThrough)
})
};
promise.then(uploadedData => console.log(uploadedData)).catch(err => console.log(err))
form.parse(req);
};