当文件大小超过100MB时,S3 getObject会断开



我正在使用React和Node下载文件上传和下载服务。我在使用AWS S3的数字海洋上托管文件。以下代码像冠军一样工作(直接从他们的文档中)。

`//OG代码app.get(/test-download/:id&quot',(req,res)=> {var params = {遗物:secret bucketname,钥匙:SecretKeystuff};

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 Stream
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));

};

带有节点流的前端响应。

带有节点流的前端响应

对此形象传达的想法有什么想法?而且,如果您可以指向正确的方向,那么您将是最大的。

简而言之:80 MB是您尝试使用此nodejs方法读取文件时的限制。

最新更新