如何在 Nodejs 中将上传的图片通过 API 接口再 POST 给另一个 API 接口
如何在 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,求大佬给个解决思路,只要说一下需要用的库和大概的思路就行,谢谢了
应该是通过 http 请求调用 api,选一个发请求的库,推荐 axios
https://github.com/axios/axios
感谢回复,我想知道在 api 内部发送给其他域名下的 api 接口不就属于跨域了吗,怎么解决这个跨域问题呢
跨域特指浏览器端
https://github.com/fhefh2018/upload2picbed
可以用这个库 看 support picbed 这里 应该是楼主要的需求 ~
哦,那我去试试,谢谢
在 Node.js 中,你可以使用 multer
中间件来处理文件上传,然后使用 axios
或 node-fetch
库将图片通过 API 接口 POST 给另一个 API 接口。以下是一个简单的示例:
- 安装必要的依赖:
npm install multer axios express
- 设置服务器和文件上传处理:
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 端点。