如何在 Nodejs 中将上传的图片通过 API 接口再 POST 给另一个 API 接口

发布于 1周前 作者 ionicwang 来自 nodejs/Nestjs

如何在 Nodejs 中将上传的图片通过 API 接口再 POST 给另一个 API 接口

我写的 nodejs 接口是基于 koa 框架的,并使用 koa-better-body 将上传的文件解析,解析得到的文件数据如下:

File {
  _events: [Object: null prototype] {},
  _eventsCount: 0,
  _maxListeners: undefined,
  size: 297525,
  path: '/tmp/upload_0be4ede06f899420d94441f9d64ff49d',
  name: 'AIRBUS_HoF_2018_Screenshot1.jpeg',
  type: 'image/jpeg',
  hash: null,
  lastModifiedDate: 2020-02-12T06:32:46.177Z,
  _writeStream: WriteStream {
    _writableState: WritableState {
      objectMode: false,
      highWaterMark: 16384,
      finalCalled: true,
      needDrain: false,
      ending: true,
      ended: true,
      finished: true,
      destroyed: true,
      decodeStrings: true,
      defaultEncoding: 'utf8',
      length: 0,
      writing: false,
      corked: 0,
      sync: false,
      bufferProcessing: false,
      onwrite: [Function: bound onwrite],
      writecb: null,
      writelen: 0,
      bufferedRequest: null,
      lastBufferedRequest: null,
      pendingcb: 0,
      prefinished: true,
      errorEmitted: false,
      emitClose: false,
      autoDestroy: false,
      bufferedRequestCount: 0,
      corkedRequestsFree: [Object]
    },
    writable: false,
    _events: [Object: null prototype] {},
    _eventsCount: 0,
    _maxListeners: undefined,
    path: '/tmp/upload_0be4ede06f899420d94441f9d64ff49d',
    fd: null,
    flags: 'w',
    mode: 438,
    start: undefined,
    autoClose: true,
    pos: undefined,
    bytesWritten: 297525,
    closed: true
  }
}

然后如何将图片转发给另一个 api 接口呢(我是打算把图片上传至图床 api ),有没有办法将发送来的 file 数据流直接发个另一个 api,求大佬给个解决思路,只要说一下需要用的库和大概的思路就行,谢谢了


6 回复

应该是通过 http 请求调用 api,选一个发请求的库,推荐 axios

https://github.com/axios/axios


感谢回复,我想知道在 api 内部发送给其他域名下的 api 接口不就属于跨域了吗,怎么解决这个跨域问题呢

跨域特指浏览器端

https://github.com/fhefh2018/upload2picbed

可以用这个库 看 support picbed 这里 应该是楼主要的需求 ~

哦,那我去试试,谢谢

在 Node.js 中,你可以使用 multer 中间件来处理文件上传,然后使用 axiosnode-fetch 库将图片通过 API 接口 POST 给另一个 API 接口。以下是一个简单的示例:

  1. 安装必要的依赖:
npm install multer axios express
  1. 设置服务器和文件上传处理:
const express = require('express');
const multer = require('multer');
const axios = require('axios');
const fs = require('fs');
const path = require('path');

const app = express();
const upload = multer({ dest: 'uploads/' });

app.post('/upload', upload.single('image'), async (req, res) => {
  const filePath = req.file.path;
  const formData = new FormData();
  formData.append('image', fs.createReadStream(filePath));

  try {
    const response = await axios.post('https://example.com/api/upload', formData, {
      headers: {
        'Content-Type': 'multipart/form-data'
      }
    });
    res.send(response.data);
  } catch (error) {
    res.status(500).send(error.message);
  } finally {
    fs.unlinkSync(filePath); // 删除临时文件
  }
});

app.listen(3000, () => console.log('Server started on port 3000'));

在这个示例中,我们使用 multer 处理文件上传,并将上传的文件存储在 uploads/ 目录中。然后,我们使用 FormData 将文件封装成表单数据,并通过 axios 将其 POST 到另一个 API 接口。在 POST 请求完成后,我们删除临时文件以避免不必要的存储占用。

注意,你需要将 https://example.com/api/upload 替换为实际的 API 端点。

回到顶部