当我尝试使用jquery-ajax上传img文件时,Nodejs:req.body是空的



我正在学习nodejs,并试图在不重新加载页面的情况下上传图像文件,我使用下面的代码,但它不起作用。需求正文为空。有人能帮我吗?

在我的ejs文件中:

`````````````````
<body>
<form action="/" method='post' enctype="multipart/form-data" id='form-data'>
<input type="file" name='file' id='file' class='file'>
</form>
<script>
$(document).on('change', '#file', function () {
var property = document.getElementById('file').files[0]; 
var form_data = new FormData();
form_data.append('file', property);
$.post({
url: '/',
type: 'post',
data: form_data,
contentType: false,
cache: false,
processData: false,
success: function (data) {
console.log(data);
}
})
})
</script>
</body>

`````````````````

这是server.js:

const express = require('express');
const app = express();
const path = require('path');
app.set('view engine', 'ejs');
app.set('views' , __dirname);
app.use(express.static(path.join(__dirname, 'public')));
app.use(express.urlencoded({ extended: true })); 
app.post('/', (req,res) =>{
console.log(req.body)
})
app.get("/", (req,res) =>{
res.render('main');
})
app.listen(3000);

我所知道的实现目标的最简单方法是使用multer

Express本身并不容易处理文件,因此通过将multer作为中间件引入,您可以轻松上传文件。看一看第5行;dest";,将其更改为您希望将文件上传到的任何位置

在第12行,我已经将中间件添加到post路由中,我传入"file"的原因是该文件的表单数据键是"file">

在第13行,我将console.log从req.body更改为req.file,因为您可以使用multer 从那里访问文件信息

const express = require('express');
const app = express();
const path = require('path');
const multer  = require('multer')
const upload = multer({ dest: './uploads/' })
app.set('view engine', 'ejs');
app.set('views' , __dirname);
app.use(express.static(path.join(__dirname, 'public')));
app.use(express.urlencoded({ extended: true })); 
app.post('/', upload.single('file'), (req,res) =>{
console.log(req.files)
})
app.get("/", (req,res) =>{
res.render('main');
})
app.listen(3000);

要安装multer,请查看我添加的链接,或者简单地键入:

npm install multer

干杯,Daniel

您需要中间件来获取该安装的文件或图像npm i multer来获取文件

app.js

const multer  = require('multer')
const upload = multer({ dest: 'uploads/' })
app.post('/profile-img', upload.single('profileImage'), function (req, res, next) {
// req.file is the user profileImage.
// req.body will hold the other fields, if  any
})

对于多个图像:

app.post('/product/images', upload.array('images', 12), function (req, res, next) {
// req.files is array of product images.
// req.body will contain the other fields, if any
})

最新更新