使用 multer Node.js 将文件下载到服务器时出错
Error downloading file to server using multer Node.js
我正在尝试向服务器发送图片,但服务器无法获取此图片,我不知道为什么会这样。
我使用 multer 进行了所有设置,但是它不起作用,我不知道我做错了什么,他们能帮忙吗?
错误:文件未定义。
Service.js
const express = require('express');
const consign = require('consign');
const bodyParser = require('body-parser');
const expressValidator = require('express-validator');
const session = require('express-session');
const paginate = require('express-paginate');
const cookieParser = require('cookie-parser');
const multer = require('multer');
// const upload = multer({ dest: 'app/images/' });
const upload = multer({ dest: 'uploads/' });
const app = express();
app.set('view engine', 'ejs');
app.set('views', './app/views');
app.use(express.static('./app/public'));
app.use(bodyParser.urlencoded({ extended: true }));
app.use(upload.single('fileUploadPlease'));
// keep this before all routes that will use pagination
app.use(paginate.middleware(10, 50));
app.use(cookieParser());
app.use(expressValidator());
app.use(session({
secret: 'asdfasjfasdf',
resave: false,
saveUninitialized: true,
cookie: { expires: new Date(253402300000000) },
}));
consign()
.include('app/routes')
.then('config/dbConnection.js')
.then('app/controllers')
// .then('app/models')
.into(app);
module.exports = app;
路线
module.exports = (application) => {
application.get('/', (req, res) => {
});
application.post('/search', (req, res) => {
console.log(`Here is the file image: ${JSON.stringify(req.file)}`);
});
};
HTML
<!DOCTYPE HTML>
<html lang="pt-br">
<head>
<meta charset="UTF-8"/>
<title>Document</title>
<!-- Latest compiled and minified CSS -->
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous">
<!-- Optional theme -->
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap-theme.min.css" integrity="sha384-rHyoN1iRsVXV4nD0JutlnGaslCJuC7uwjduW9SVrLvRYooPp2bWYgmgJQIXwl/Sp" crossorigin="anonymous">
<!-- Latest compiled and minified JavaScript -->
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js" integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa" crossorigin="anonymous"></script>
</head>
<body>
<div>
<form class ="testeMongoose" action= "/" method= "get">
</form>
<div id="contain" class="container">
<div class="col-md-12">
<div class="card border-default mb-3">
<form class ="testeMongoose" action= "/search" method= "post">
<div class="fileUpload btn btn-primary col-md-4 mb-2">
<span>Carrega arquivo xlsx</span>
<input name="fileUploadPlease" id="fileUploadPlease" type="file" class="upload" />
</div>
<div class="form-group ">
<div class="col-sm-10">
<button type="submit" class="btn btn-primary" id="Import">Enviar</button>
</div>
</div>
</form>
</div>
</div>
</div>
</body>
</html>
Return 共 req.file = 未定义。我不明白你为什么错了。
您的 <form>
没有设置正确的编码类型:
<form class ="testeMongoose" action= "/search" method= "post" enctype="multipart/form-data">
此外,multer
documentation 指出:"Never add multer as a global middleware since a malicious user could upload files to a route that you didn't anticipate."
因此,建议不要使用 app.use(upload.single(...))
:
application.post('/search', upload.single('fileUploadPlease'), (req, res) => { ... })
我正在尝试向服务器发送图片,但服务器无法获取此图片,我不知道为什么会这样。
我使用 multer 进行了所有设置,但是它不起作用,我不知道我做错了什么,他们能帮忙吗?
错误:文件未定义。
Service.js
const express = require('express');
const consign = require('consign');
const bodyParser = require('body-parser');
const expressValidator = require('express-validator');
const session = require('express-session');
const paginate = require('express-paginate');
const cookieParser = require('cookie-parser');
const multer = require('multer');
// const upload = multer({ dest: 'app/images/' });
const upload = multer({ dest: 'uploads/' });
const app = express();
app.set('view engine', 'ejs');
app.set('views', './app/views');
app.use(express.static('./app/public'));
app.use(bodyParser.urlencoded({ extended: true }));
app.use(upload.single('fileUploadPlease'));
// keep this before all routes that will use pagination
app.use(paginate.middleware(10, 50));
app.use(cookieParser());
app.use(expressValidator());
app.use(session({
secret: 'asdfasjfasdf',
resave: false,
saveUninitialized: true,
cookie: { expires: new Date(253402300000000) },
}));
consign()
.include('app/routes')
.then('config/dbConnection.js')
.then('app/controllers')
// .then('app/models')
.into(app);
module.exports = app;
路线
module.exports = (application) => {
application.get('/', (req, res) => {
});
application.post('/search', (req, res) => {
console.log(`Here is the file image: ${JSON.stringify(req.file)}`);
});
};
HTML
<!DOCTYPE HTML>
<html lang="pt-br">
<head>
<meta charset="UTF-8"/>
<title>Document</title>
<!-- Latest compiled and minified CSS -->
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous">
<!-- Optional theme -->
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap-theme.min.css" integrity="sha384-rHyoN1iRsVXV4nD0JutlnGaslCJuC7uwjduW9SVrLvRYooPp2bWYgmgJQIXwl/Sp" crossorigin="anonymous">
<!-- Latest compiled and minified JavaScript -->
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js" integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa" crossorigin="anonymous"></script>
</head>
<body>
<div>
<form class ="testeMongoose" action= "/" method= "get">
</form>
<div id="contain" class="container">
<div class="col-md-12">
<div class="card border-default mb-3">
<form class ="testeMongoose" action= "/search" method= "post">
<div class="fileUpload btn btn-primary col-md-4 mb-2">
<span>Carrega arquivo xlsx</span>
<input name="fileUploadPlease" id="fileUploadPlease" type="file" class="upload" />
</div>
<div class="form-group ">
<div class="col-sm-10">
<button type="submit" class="btn btn-primary" id="Import">Enviar</button>
</div>
</div>
</form>
</div>
</div>
</div>
</body>
</html>
Return 共 req.file = 未定义。我不明白你为什么错了。
您的 <form>
没有设置正确的编码类型:
<form class ="testeMongoose" action= "/search" method= "post" enctype="multipart/form-data">
此外,multer
documentation 指出:"Never add multer as a global middleware since a malicious user could upload files to a route that you didn't anticipate."
因此,建议不要使用 app.use(upload.single(...))
:
application.post('/search', upload.single('fileUploadPlease'), (req, res) => { ... })