我正在使用react和node开发文件上传和下载服务。我在使用AWS S3的Digital Ocean上托管文件。下面的代码工作起来很好(直接来自他们的文档)。
` // OG code app.get(“/test-download/:id”,(req,res)=〉{ var params = { Bucket:secretBucketName,Key:};
s3.getObject(params, function(err, data) {
//
console.log(data);
//
if (!err) {
res.send({ data, key: params.Key });
} else {
// an error occurred
console.log({ err });
}
});
});`
然而,每当我试图下载一个超过100 mb的文件时,要么服务器崩溃,要么JavaScript堆内存不足,要么其他一些错误。
因此,我尝试流式传输getObject请求并成功运行。然而,我在前端得到一个奇怪的响应,我不确定是否需要在流式传输之前转换数据或之后转换数据......
app.get("/test-download/:id", (req, res) => {
var params = {
Bucket: secretBucketName,
Key: secretKeyStuff
};
// This Streams
s3.getObject(params)
.createReadStream()
.pipe(res)
.on("finish", () => {
console.log("** done");
});
});
前端代码..
downloadFile = (id, name, type) => {
axios
.get(
`/test-download/${id}`,
this.props.handleSnackBar("Your download has been started.")
)
.then(res => {
download(
// Stream doesn't recognize res.data.data.Body.data
// I'm assuming b/c of the data format in which is being returned
new Blob([new Uint8Array(res.data.data)], { type: "octet/stream" }),
`${name}.${type}`
);
console.log(res.data);
})
.catch(err => console.log(err));
};
带节点流的前端响应..
Front end response with node stream
你知道这张照片传达了什么吗?如果你能给我指出正确的方向,你将是最棒的。
1条答案
按热度按时间unhi4e5o1#
简而言之:当你试图使用这个nodejs方法读取文件时,80MB是限制。