【问题标题】:Reduced file size after uploading to S3 bucket from nodejs从 nodejs 上传到 S3 存储桶后文件大小减小
【发布时间】:2021-12-07 20:55:23
【问题描述】:

我正在尝试将文件从特定文件夹位置上传到示例 S3 存储桶。我为此使用标准的nodejs aws-sdk。文件是深度缩放图像 (.dzi) 文件。 文件正在上传到我的 S3 存储桶,但文件内容未正确上传。就像我上传大小为 800B 的图像,但上传后图像大小只有 7B。我尝试下载它以查看其内容,但该文件不包含图像,而仅包含文件名。这是我为上传文件运行的代码:

function read(file, numFiles) {
fs.readFile(file, function (err, data) {
  if (err) console.log(err);
  const fileContent = Buffer.from(file, "binary");
  s3.putObject(
    {
      Bucket: "sample-bucket",
      Key: file,
      Body: fileContent,
    },
    function (resp) {
      console.log(arguments);
      console.log("Successfully uploaded, ", file);
      uploadCount++;
      console.log("uploadcount is:", uploadCount);
      if (uploadCount == numFiles) {
        res.send("All files uploaded");
      }
    }
  ).on("httpUploadProgress", (evt) => {
    console.log(`Uploaded ${evt.loaded} out of ${evt.total}`);
  });
});

}

我正在将文件从另一个函数传递给这个读取函数。我不确定为什么会这样。任何帮助将不胜感激。

上传图片属性之前:

上传到 S3 存储桶的图片属性:

【问题讨论】:

    标签: javascript node.js amazon-s3 aws-sdk


    【解决方案1】:

    Buffer.from(file) 不会返回文件的内容而是返回参数的缓冲区,这次参数是“文件”。所以上传到 S3 的文件以文件名作为内容。

    尝试改变这一行

    const fileContent = Buffer.from(file, "binary");
    

    喜欢这个。

    const fileContent = fs.readFileSync(file);
    

    【讨论】:

    • 感谢您的回复,但是这个解决方案对我不起作用。 fs 库在读取此文件时抛出错误。
    • 我什至尝试过直接在 Body 中使用文件作为参数,但结果是一样的。
    • 你能分享来自 fs 库的错误信息吗?
    • stackoverflow.com/questions/65723993/…。它类似于此错误。
    • 可能是文件路径问题。如果文件与 .js 位于同一目录中,则为const file = "xxxx.dzi";。使用 ../ 或类似方式调整路径。
    猜你喜欢
    • 2016-06-22
    • 2021-12-02
    • 1970-01-01
    • 2020-05-20
    • 1970-01-01
    • 1970-01-01
    • 2018-04-12
    • 2020-07-22
    • 2018-12-30
    相关资源
    最近更新 更多