是否可以上传两个不同的文件(不同的扩展名)到不同的文件夹使用multer+node js。multer(1.3.0)。
我得到一个错误:“意外的字段”
//uploading content code here
router.post('/v1/uploads', function(req, res){
//uploading the cover
//set storage engine for COVER
var storage = multer.diskStorage({
destination : './uploads/covers/',
filename: function(req, file, callback){
callback(null, randomString.generate(10) + "_"+ Date.now() + path.extname(file.originalname));
}
});
//init upload for cover
var upload = multer({
storage: storage,
limits:{fileSize: 50 * 1024 * 1024},
fileFilter: function(req, file, callback) {
checkFileTypeCover(file,callback)
}
}).single('artwork');
upload(req,res, (err) => {
if(err){
res.json({
success: false,
message: 'upload failed cover with an error : '+err
});
}else{
if(req.file == 'undefined'){
res.json({
success: false,
message: 'failed to upload the file on the server for cover'
});
}else{
console.log('we have uploaded an image');
multer = '';
var storage2 = multer2.diskStorage({
destination : './uploads/content/',
filename: function(req, file, callback){
callback(null, randomString.generate(10) + "_"+ Date.now() + path.extname(file.originalname));
}
});
//init upload for cover
var upload2 = multer2({
storage: storage2,
limits:{fileSize: 50 * 1024 * 1024},
fileFilter: function(req, file, callback) {
checkfile(file,callback)
}
}).single('pdf');
//upload image successfully, then upload pdf with new cover name
//uploading the pdf
upload2(req, res, (err) => {
if(err){
res.json({
success: false,
message: 'upload failed pdf with an error : '+err
});
}else{
if(req.file == 'undefined'){
res.json({
success: false,
message: 'failed to upload the file on the server'
});
}else{
console.log('we have uploaded a pdf');
/*
//pdf file url for the content
var pdf_url = req.file.filename;
var title = req.body.title;
var description = req.body.description;
var free = req.body.free;
var content_type = req.body.content_type;
var category = req.body.category;
var publisher = req.body.publisher;
var newzine = new Newzine();
newzine.title = title;
newzine.description = description;
if(free != null){
newzine.free = free;
}
if(content_type !=null){
newzine.content_type = content_type;
}
newzine.category = category;
newzine.publisher = publisher;
newzine.cover_url = 'no_image.png';
newzine.pdf_url = pdf_url;
//save the newzine on the mongo db database
newzine.save(function(err){
if(err){
res.json({
success: false,
message: 'uploaded failed',
error: err
});
}else{
res.json({
success: true,
message: 'file uploaded successful'
});
}
});
}
}
});
}
}
});
});
下面我检查图像和封面
var storage = multer.diskStorage({
destination : './uploads/content/',
filename: function(req, file, callback){
callback(null, randomString.generate(10) + "-"+ Date.now()+path.extname(file.originalname));
}
});
var upload = multer({
storage: storage,
limits:{fileSize: 50 * 1024 * 1024},
fileFilter: function(req, file, callback) {
checkFileTypePDF(file,callback)
}
}).single('pdf');
//check file type here for pdf
function checkFileTypePDF(file, callback){
// Allow only PDF extensions
const fileTypes = /pdf|PDF/;
//check extension
const extname = fileTypes.test(path.extname(file.originalname).toLowerCase());
//check mime type
const mimetype = fileTypes.test(file.mimeType);
if(extname){
return callback(null,true);
}else{
callback('only pdf is allowed');
}
}
//check file type here for cover
function checkFileTypeCover(file, callback){
// Allow only Image extensions
const fileTypes = /jpg/;
//check extension
const extname = fileTypes.test(path.extname(file.originalname).toLowerCase());
console.log('the ext name is '+extname);
//check mime type
const mimetype = fileTypes.test(file.mimeType);
console.log('the mimetype is '+mimetype);
if(extname){
return callback(null,true);
}else{
callback('only images are allowed');
}
}
我正在使用邮递员上传图像和pdf,但它在邮递员上失败了,因为它不允许两个文件同时上传。一次只能上传一个文件。
您可以遵循以下方法:
const storage = multer.diskStorage({
destination: function (req, file, cb) {
let filextPos = file
.originalname
.lastIndexOf('.'),
filext = file
.originalname
.substring(filextPos)
if (filext === 'jpg') {
cb(null, './public/images/jpgs/')
} else {
cb(null, './public/images/pngs/')
}
}
});
const uploader = multer({storage: storage}).single('img');
我们在这里所做的是根据文件(图像)扩展名更改默认的上传路径。
此外,我们使用上载程序中间件,
app.post('/uploadImage', uploader, function(req, res) {
//file uploaded and callback received.
})
我希望你能上传你的代码。我将在这里发布一个非常通用的方法供您参考。无论如何,multer不介意多次上传或扩展,至少根据它的默认设置。前端代码示例:
<form action="PathOfYourChoice" method="post" enctype="multipart/form-data">
Select image to upload:
<input type="file" name="ANY_NAME_YOU_WANT" id="fileToUpload" multiple="">
<input type="submit" value="Upload Image" name="submit">
</form>
使用此表单多次上载任何文件扩展名。注意,您只需要在html标记中有多个attribute(没有必要的值)。
在后端,提供您的存储配置,例如
var storage = multer.diskStorage({//further options to be specified after
discussion
destination: function(req, file, callback) {
callback(null, destination_fileupload(a variable,you should set the
path))
},
filename: function(req, file, callback) {
//filename schema has to be changed.Further decision pending on naming
scheme
callback(null, Date.now()+"-"+file.originalname)
}
});
在后端的路由上,例如
router.post("/PathOfYourChoice",function(req,res){
var upload = multer({
storage: storage
}).array('ANY_NAME_YOU_WANT'); //use .singleif you want only single file
upload . Al
upload(req,res,function(err){
if(err)
throw err;
res.send("files uploaded")
})
需要注意的一件事是.array方法中的字符串必须与您在表单HTML中为输入元素指定的名称相同。在form action属性中指定的路径和路由路径的情况也是一样的。
问题内容: 我如何让multer接受来自多个文件类型字段的文件? 我有以下代码,使用node.js中的multer上传单个文件: 通过以下形式,在仅视频字段具有值的条件下(如果同时指定两个字段,则会出现“意外字段”错误): 从文档中不清楚该如何处理?任何建议,将不胜感激。顺便说一句,我尝试了以下参数变体,但没有成功: 问题答案: 您想要的是:
我正在创建一个简单的应用程序,作为Ionic2的学习体验,它连接到运行multer的节点服务器上传图像。我遇到的问题是,我需要从multer获得最后的文件名回到上传它的应用程序,以保存它在本地。我使用@Ionic/Cloud-Angular中的Auth和User模块进行身份验证和用户信息。User对象有一个details对象,其中包含“name”、“email”、“username”、“image
我有一个express应用程序,正在使用multer上传文件,问题是当我在生产服务器上用PM2运行该应用程序时,multer上传文件给了我一个错误:
我的控制器中有以下代码: 通过中的调用: 我正在使用postman测试我的应用程序。 标题: 车身: 生的: -----WebKitFormBoundary7MA4YWXKTRZU0GW内容-配置:表单-数据;name=“上载[]”;filename=“banana.png”content-type:image/png png数据在此处。-----WebKitFormBoundary7MA4YWX
由邮递员生成以下代码: 此请求在服务器上生成一个大小为0 Kb的文件。而且我无法放文件。所以,我必须放一个这样的文件: 但我有一个超时选项。 如何使用这种Rest API放置文件?
我正在测试文件上传到SharePoint在线与邮递员。在我的帖子请求中,我将正文设置为form-data,并添加了一个名为a.txt.的文本文件的文件参数 当我执行请求时,我的文件被上传,但当我打开文件时,内容被删除 我已尝试将内容类型标题设置为 应用程序/x-wow-form-urlencoded或多部分/form-data 但是没有运气