Node.js 无法将文件发送到express/multer后端
下面的代码列出了文件夹中的文件。然后尝试将它们发送到express后端的post/upload。但是文件总是未定义的。然而,似乎大小和其他信息可以通过 客户端发送Node.js 无法将文件发送到express/multer后端,node.js,express,multer,Node.js,Express,Multer,下面的代码列出了文件夹中的文件。然后尝试将它们发送到express后端的post/upload。但是文件总是未定义的。然而,似乎大小和其他信息可以通过 客户端发送 const axios = require('axios'); var FormData = require('form-data'); //requiring path and fs modules const path = require('path'); const fs = require('fs'); //joining
const axios = require('axios');
var FormData = require('form-data');
//requiring path and fs modules
const path = require('path');
const fs = require('fs');
//joining path of directory
const directoryPath = path.join(__dirname, '');
//passsing directoryPath and callback function
fs.readdir(directoryPath, function (err, files) {
//handling error
if (err) {
return console.log('Unable to scan directory: ' + err);
}
//listing all files using forEach
var postInfo = files.forEach(async function (file) {
const form_data = new FormData();
form_data.append('file', fs.createReadStream(file));
const request_config = {
method: "post",
url: 'http://localhost:8080/upload',
port: 8080,
headers: {
"Content-Type": "multipart/form-data; boundary=form_data._boundary"
},
data: form_data
};
try {
var req = await axios(request_config);
// Do whatever you want to do with the file
console.log("Request: ", req);
} catch (e) {
console.error(e);
}
});
console.log(postInfo);
});
在后端接收代码
const http = require('http')
const port = 8080
const express = require('express');
const app = express();
const multer = require('multer');
const server = http.createServer(app)
let storage = multer.diskStorage({
destination: function (req, file, cb) {
cb(null, './uploads')
},
filename: function (req, file, cb) {
cb(null, file.fieldname + '-' + Date.now())
}
});
const upload = multer({ storage }).single('file');
app.post('/upload', upload, (req, res) => {
console.log(req.files) // this does log the uploaded image data.
})
// bind the server on port
server.listen(port, (err) => {
if (err) {
return console.log('something bad happened', err)
}
console.log(`server is listening on ${port}`)
})
日志:
我能够重现这个问题,并且能够用以下ajdusts修复代码(注意,为了简单起见,我上传了一个文件) 在客户端,您基本上只需将表单数据提供给axios并调用
getHeaders()
,即可获得已设置的标题-还需要调整表单中的文件名
// client.js
...
const form_data = new FormData();
form_data.append('file', fs.createReadStream(__dirname + '/file-you-want-to-upload'));
const request_config = {
method: "post",
url: 'http://localhost:8080/upload',
port: 8080,
data: form_data,
headers: form_data.getHeaders()
};
...
在后端,您需要确保在使用upload时访问文件
而不是文件
。single
并在处理程序中实际发送响应,否则响应将挂起:
//server.js
...
const upload = multer({storage}).single('file');
app.post('/upload', upload, (req, res) => {
console.log(req.file) // this does log the uploaded image data.
res.send("File uploaded");
});
...
我能够重现这个问题,并且能够用以下ajdusts修复代码(注意,为了简单起见,我上传了一个文件)
在客户端,您基本上只需将表单数据提供给axios并调用getHeaders()
,即可获得已设置的标题-还需要调整表单中的文件名
// client.js
...
const form_data = new FormData();
form_data.append('file', fs.createReadStream(__dirname + '/file-you-want-to-upload'));
const request_config = {
method: "post",
url: 'http://localhost:8080/upload',
port: 8080,
data: form_data,
headers: form_data.getHeaders()
};
...
在后端,您需要确保在使用upload时访问文件
而不是文件
。single
并在处理程序中实际发送响应,否则响应将挂起:
//server.js
...
const upload = multer({storage}).single('file');
app.post('/upload', upload, (req, res) => {
console.log(req.file) // this does log the uploaded image data.
res.send("File uploaded");
});
...