Node.js 在express中未上载相同的图像
我尝试使用express上传图像,但我面临两个问题,第一,每当我再次上传同一图像时,它不会被上传;第二,在上传任何单个图像后,一个包含图像的文件也会被上传。这是我的密码Node.js 在express中未上载相同的图像,node.js,mongodb,express,mongoose,Node.js,Mongodb,Express,Mongoose,我尝试使用express上传图像,但我面临两个问题,第一,每当我再次上传同一图像时,它不会被上传;第二,在上传任何单个图像后,一个包含图像的文件也会被上传。这是我的密码 var multer = require('multer'); var uploads = multer({dest: './images'}); app.post('/uploading', uploads.single("file"), function (req, res) { var file = __dirna
var multer = require('multer');
var uploads = multer({dest: './images'});
app.post('/uploading', uploads.single("file"), function (req, res) {
var file = __dirname +"/images" + "/" + req.file.originalname;
fs.readFile( req.file.path, function (err, data) {
fs.writeFile(file, data, function (err,data) {
if( err ){
console.error( err );
response = {
message: 'Sorry, file couldn\'t be uploaded.',
filename: req.file.originalname
};
}else{
response = {
message: 'File uploaded successfully',
filename: req.file.originalname
};
}
res.end( JSON.stringify( response ) );
});
});
})
uploads.single(“文件”)
中间件将处理文件上传。您不必专门fs.读取
和fs.写入
文件
var multer = require('multer');
var uploads = multer({dest: './images'});
app.post('/uploading', uploads.single("file"), function (req, res) {
//the file is uploaded automatically
})
编辑:以上代码将上载文件名为十六进制字符串的文件,不带任何扩展名。
要添加重命名功能,您需要使用diskStorage
。这是取自第页的代码
现在,您可以使用uploads
变量作为中间件,如上面的代码片段所示
您可以根据需要编辑
filename:function(req,file,cb){..}
。现在,文件名将为.ext另一种处理方法是不使用中间件,而是通过以下选项手动使用multer:
try {
var storage = multer.diskStorage({
destination: function(request, file, callback) {
//define folder here by fs.mkdirSync(anyDirName);
},
filename: function(req, file, callback) {
callback(null, anyFileName);
},
limits: self.limits
});
var upload = multer({
storage: storage,
fileFilter: function(request, file, callback) {
// here you can filter out what not to upload..
}
}).any();
upload(request, response, callback);
} catch (e) {
}
希望这有帮助 查克罗博蒂:这个问题的解决方案是什么?如何一次又一次地上传同一个图像,以及如何停止上传不需要的图像文件
fs.read
和fs.write
正在创建附加文件。使用上述代码,可以随时上传相同的图像。因为每次上传后文件名都是不同的十六进制字符串。你能用这个代码检查一下吗?这是相当标准的,即使它在multer docsi刚刚检查过的文件中,相同的图像没有上传,但一个文件正在上传哦,哦,我现在知道你的问题了。这是意料之中的行为。默认情况下,multer上载文件名为随机字符串且没有扩展名的文件。上传时需要添加重命名功能。让我在回答中补充这一点。
try {
var storage = multer.diskStorage({
destination: function(request, file, callback) {
//define folder here by fs.mkdirSync(anyDirName);
},
filename: function(req, file, callback) {
callback(null, anyFileName);
},
limits: self.limits
});
var upload = multer({
storage: storage,
fileFilter: function(request, file, callback) {
// here you can filter out what not to upload..
}
}).any();
upload(request, response, callback);
} catch (e) {
}