【问题标题】:How to save image coming from multer memory disk?如何保存来自multer存储盘的图像?
【发布时间】:2022-08-18 15:36:08
【问题描述】:

我在 nodejs 中使用 multer 来处理 multipart/formdata 请求并在请求中获取图像文件,如下所示:

import multer from \"multer\";

const upload = multer({
  storage: multer.memoryStorage(),
  limits: { fileSize: 1000000000, files: 2 },
});



app.post(\"/\", upload.single(\"image\"), (req, res , next) => {
      const imageFile = req.file

      dbx
        .filesUpload({ path: \"/image.png\", contents: imageFile })
        .then((response: any) => {
         
        })
        .catch((uploadErr) => {
         
        });
    }
  )

问题是我无法上传图像,它给我一个错误,它是一个缓冲区而不是一个实际的图像。如何从req.file 生成图像然后上传而不将其保存在磁盘上?

  • 它给出了一个错误什么是缓冲区而不是实际图像?
  • 您可以通过req.file.buffer 访问缓冲区,因此请尝试const imageFile = req.file.buffer
  • @user3840170 是的,它只接受像 wallpaper.png wallpaper.jpg 这样的图像文件,所以我想将 req.file 图像转换为我的控制器内的实际图像并将其发送到 dropbox api,而不将服务器内的 req.file 作为文件保存。
  • @turivishal 我可以访问它,但我想将其转换为实际的图像文件并发送到 dropbox api 。
  • “是”不是对“什么”问题的回答。去搞清楚。

标签: javascript node.js buffer multipartform-data multer


【解决方案1】:

您可以解码数据或更改其编码,但将其转换为图像没有任何意义。

dropboxhere提供的示例代码,读取utf-8中的文件并上传。

您也可以通过获取缓冲区并上传它来做到这一点。

  const imageFile = req.file.buffer;

【讨论】:

  • 我确实尝试过,但 Dropbox 无法识别和预览图像文件。问题链接在这里github.com/dropbox/dropbox-sdk-js/issues/1000
  • 为了清楚起见,您是否尝试过将 imageFile 设置为 req.file.buffer?
  • 我通过发送缓冲区图像本身解决了这个问题
  • 伟大的!我已经更新了我的答案我还要注意这是@turivishal 在 cmets 中告诉你的
【解决方案2】:

通过像这样将文件缓冲区本身发送到保管箱解决了这个问题

    const imageFile = req.file && req.file.buffer;

    dbx
      .filesUpload({ path: "/life.png", contents: imageFile })
      .then((response: any) => {
        console.log("SUccess");
      })
      .catch((uploadErr) => {
        console.log("ERRRR");
        console.log(uploadErr);
      }); 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-05-10
    • 1970-01-01
    • 2019-07-22
    • 2017-05-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-08
    相关资源
    最近更新 更多