首页 > 解决方案 > 快速获取图片并发送到imgur

问题描述

我在 nodejs 中使用 express,我想使用 imgur 来托管图片。我有我的访问令牌,我需要请求这个端点:“ https://api.imgur.com/3/upload ”,标题:headers: {'Authorization': "bearer " + config.access_token_imgur, 'content-type': 'multipart/form-data'}给定图片。

说到做到,第一个问题是处理图片:这是多部分的,而 bodyparser 不能。我试过multer,但它总是保存图片,我只想得到它,并将它发布到端点,所以,我的目标是:

    router.post("/upload",upload.single('file'), async (req,res)=>{ 
  if(req.file){
    var headers = {
        headers: {"Authorization" : `Bearer ${config.access_token_imgur}`, 'content-type': 'multipart/form-data'}
    };
    var formData = new FormData();
    //formData.append("image", req.file);
    axios.post('https://api.imgur.com/3/upload', formData, headers).then((res)=>{
        console.log(res);
        console.log(res.body);
        console.log(res.data);
    }).catch((error)=>{
        console.log(error);
    })

    //must get a picture from the parameters (how to handle ? )
    //send it to https://api.imgur.com/3/upload with headers with post method
    //handle response
  }else{
      res.status(500).json({success: false})
  }

})

如您所见,我尝试使用 multer,但我认为这不是一个好的答案:如何在不保存的情况下处理图片?(多部分),并将其发送到端点?(axios,请求,...)谢谢

标签: expressrequestaxiosmultipartbody-parser

解决方案


您是正确的,bodyParser 不会帮助您处理多部分数据。

解决方案1:

您仍然可以使用 multer 进行处理,但使用不同的存储引擎。例如,您可以使用MemoryStorage,它只会将正在处理的文件缓存在内存中,而无需实际将它们写入磁盘。

解决方案2:

如果您想完全跳过图像处理,您可以使用以下代码将请求转发到 3-rd 方服务:

const request = require('request')
...

router.post('/upload', (req,res, next) => { 
  const forwardReqConfig = {
    url: 'https://api.imgur.com/3/upload',
    headers: {
      'Authorization': `bearer ${config.access_token_imgur}`,
      'Content-Type': 'multipart/form-data'
    }
  };
  req.pipe(request.post(forwardReqConfig)).pipe(res)
})

由于 express req对象继承自 nodejs request对象,它也是一个流。这同样适用于 res 对象。您可以将 req 流通过管道传输到请求库创建的流中,然后将来自 3-rd 方服务的响应通过管道传输回 API 的 res 中。

我希望这有帮助。


推荐阅读