【问题标题】:Service for uploading multiple file using multer in node.js在 node.js 中使用 multer 上传多个文件的服务
【发布时间】:2019-06-15 20:10:14
【问题描述】:

我创建了名为 FileUpload 的类,并创建了一个函数来使用 multer 上传多个文件。我想在控制器中使用此方法,但我不能这样做。我无法从请求中获取其他字段。 这是 FileUpload 类:

var multer = require('multer');

class FileUpload{
constructor(){
    this.storage = null;
    this.filepath = null;
    this.upload = null;
}

uploadMultipleFile(req,res,path){
    this.filepath = path;
    this.storage = multer.diskStorage({
        destination : (req,file,callback) =>{
            callback(null,path)
        },
        filename : (req,file,callback)=>{
            this.filepath = this.filepath +  file.fieldname + '-' + new Date().getTime();
            callback(null,this.filepath);
        }
    });
    this.upload = multer({storage:this.storage}).array('files',req.files.length);
    this.upload(req,res,(err) => {
        if(err){
            return res.status(403).send({
                    success:false,
                    message : SystemMessage.UploadErrorMessage.replace('{0}',"Files"),
                    data : {
                        filepath : filepath 
                    }

            });
        }
        return res.status(200).send({
            success:true,
            message : SystemMessage.UploadSuccessMessage.replace('{0}',"Files"),
            data : {
                filepath : filepath 
            }
        });
    });

}
}

module.exports = FileUpload;

这是我定义路由的控制器文件:

const express = require('express');
const router = express.Router();
const FileUpload = require('../services/fileUpload');

router.post("/add",(req,res)=>{
let localdate=CommonFunction.datetime();
let fileUpload = new FileUpload();
let obj = {
   user_id:req.body.user_id,
   subject:req.body.subject,
   message:req.body.message,
   created_date:localdate,
   modified_date:localdate
 };

 });

当我从邮递员那里调用这条路线时,我在正文中使用了表单数据格式。我得到了以下响应:

{  
   user_id: undefined, 
   subject: undefined,
   message: undefined,
   created_date: '2019-1-22 13:55:42',
   modified_date: '2019-1-22 13:55:42' 
}

指导我如何在路由 /add 中使用 uploadMultipleFile 函数?。

【问题讨论】:

    标签: node.js express file-upload postman multer


    【解决方案1】:

    当你像这样定义你的文件上传路由器时,你可以使用 multer 作为中间件

    在路由器文件中

    var multer  = require('multer');
    var path = require('path');
    var storage = multer.diskStorage({
        destination: 'public/upload/', // uploading directory 
        filename: function ( req, file, cb ) { //cahnge file name
            let ext = (path.extname(file.originalname)).toLowerCase(); //get file extension
            let time = Date.now(); //get timestamp
            cb( null, 'vehicle-'+time+ext); //return renamed file
        }
    });
    
    var upload = multer( { storage: storage } );
    
    router.post('/add',upload.any(), function (req,res){ // any() will accept files that comes over the wire. An array of files will be stored in req.files
        uploadMultipleFile(req, res); //or redirect to your controller as you normal do
    });
    

    现在转到您的控制器 (uploadMultipleFile(req, res)) 文件。

    uploadMultipleFile(req, res){
        console.log(req.files); //see your files in console
        // in req.files files are available do what stuff you want
        // you can use loop function to save files details in your database
        // you can get single file like this 'your uploaded directory/'+req.file[0].filename;
    }
    

    【讨论】:

    • 我将有不同的上传目录路径取决于路由。我想在路由中给出上传目录路径。
    • 是的,你可以像上面的例子那样动态地做,我已经动态地修改了文件名。 Use function like-> destination: function ( req, file, cb ) { // 给出动态指定和回调返回指定 }
    • 如何在MVC结构中实现这段代码
    猜你喜欢
    • 1970-01-01
    • 2017-12-03
    • 2017-01-13
    • 2021-03-27
    • 2019-01-26
    • 2020-05-31
    • 2017-01-01
    • 1970-01-01
    • 2017-11-12
    相关资源
    最近更新 更多