首先,在第一个服务器上,我有这样一个路由:
const express = require('express');
const router = express.Router();
const FormData = require('form-data');
const fetch = require('node-fetch');
const multer = require('multer');
const storage = multer.memoryStorage();
const upload = multer({ storage });
router.post('/', upload.single('file'), async (req, res) => {
const form = new FormData();
form.append('folderId', req.body.folderId);
form.append('file', req.file.buffer, req.file.filename);
const result = await fetch('http://localhost:3003/users', { method: 'POST', body: form }).then(res => res.json());
res.json(result);
})
在这个服务器上,一切正常,我可以看到req.file以及它的缓冲区。所以我想将这个文件(不存储在第一个服务器上,只存在于内存中和作为缓冲区)发送到另一个服务器。
另一个服务器的路由如下:
const express = require('express');
const router = express.Router();
const multer = require('multer');
const path = require('path');
const putanja = path.join(__dirname, '../uploads/users');
const storage = multer.diskStorage({
destination: (req, file, cb) => {
console.log('entered here?')
if (!req.body.folderId) return cb({ message: 'no folderId' });
if (!fs.existsSync(putanja + '/' + folderId)) fs.mkdirSync(putanja + '/' + folderId);
cb(null, putanja + '/' + folderId);
},
filename: (req, file, cb) => cb(null, file.originalname)
});
const upload = multer({ storage });
const fs = require('fs');
router.post('/', upload.single('file'), async (req, res) => {
console.log(req.body)
console.log(req.file)
res.json({ status: 'ok' })
})
在第二个服务器上,它甚至没有进入multer中间件,req.file始终被定义,并且那个console.log('entered here?')从未被看到。看起来我没有将数据作为multipart-form传递?此外,通过postman直接向第二个服务器发送文件时可以工作。所以我的问题是,我该如何发送该文件?作为缓冲区?流?Base64?我认为我尝试了所有可能,甚至将node-fetch更改为request,但仍然没有运气。