ExpressJs文件上传问题



即使上传.jpg或.png格式的文件,也会显示

格式不允许,请上传带有".png"、".gif"、".jpg"的文件。

我不知道为什么会这样。如何解决或修复此问题?我试着使用其他网站上建议的方法来解决这个问题,但我没能解决这个问题。

routes.js:

const {
con,
sessionStore
} = require('./config/db');
exports.new = function(req, res){
message = '';
if(req.method == "POST"){
const post  = req.body;
const username= post.username;
const title= post.title;
const state= post.state;
const category= post.category;
const description= post.description;

if (!req.files)
return res.status(400).send('No files were uploaded.');

const file = req.files.uploaded_image;
var img_name=file.name;

if(file.mimetype == "image/jpeg" ||file.mimetype == "image/png"||file.mimetype == "image/gif" ){

file.mv('public/imgs/uploads/'+file.name, function(err) {

var sql = "INSERT INTO `nt_data`(`username`,`title`,`state`,`category`, `images` ,`description`) VALUES ?";
var query = con.query(sql, [username, title, state, category, img_name, description], function(err) {
if (!err) {
res.redirect('show/' + username);
}
else {
message = "This format is not allowed , please upload file with '.png','.gif','.jpg'";
res.render('new.ejs',{message: message});
}
}); 
}); 

} 
}
else {
res.render('new');
}

};
exports.show = function(req, res){
let message = '';
var username = req.params.username;
const sql="SELECT * FROM `nt_data` WHERE `username`='"+username+"'"; 
con.query(sql, function(err, result){
if(result.length <= 0)
message = "show not found!";

res.render('show.ejs',{data:result, message: message});
});
};

我的新.ejs文件的一部分

<form action="/" method="POST" role="form"  enctype="multipart/form-data" class="was-validated">
<% if (message.length > 0) { %>
<div class="alert alert-success col-sm-12"><%= message %></div>
<% } %>
<div class="input-group mb-3 input-group-lg">
<div class="input-group-prepend">
<span class="input-group-text">Username</span>
</div>
<input type="text" class="form-control" required placeholder="Enter Username" name="username">
<div class="valid-feedback">Valid.</div>
<div class="invalid-feedback">Please fill out this field.</div>
</div>
<div class="input-group mb-3 input-group-lg">
<div class="input-group-prepend">
<span class="input-group-text">Title</span>
</div>
<input type="text" class="form-control" required placeholder="Enter Title" name="title">
<div class="valid-feedback">Valid.</div>
<div class="invalid-feedback">Please fill out this field.</div>
</div>

<div class="custom-file mb-3">
<input type="file" class="custom-file-input" id="customFile" name="uploaded_image">
<label class="custom-file-label" for="uploaded_image">Choose file</label>

</div>

您应该使用multer将图像或文件上传到服务器。因为必须使用缓冲区将数据从用户传输到本地或公共服务器,并且必须创建会话。你可以使用multer轻松完成这些操作。

你可以查看

https://www.npmjs.com/package/multer

最新更新