node.js - 使用 express/multer 时更改文件名

标签 node.js express multer

我在上传 pdf 时遇到问题,当我上传它时(我正在使用 ng-file-upload)到达 express.js 的文件 json 是:

{ fieldname: 'file',
  originalname: 'db.pdf',
  encoding: '7bit',
  mimetype: 'application/pdf',
  destination: './client/public/docs/transactions/',
  filename: '8a3fe7cb7369d9cffa8e17b162ec3d6b',
  path: 'client\\public\\docs\\transactions\\8a3fe7cb7369d9cffa8e17b162ec3d6b',
  size: 9179145 }

我想将名称更改为我从 angular 发送到 express 的属性,这是所有设置:

html 元素:

<div ngf-select="vm.uploadPdf($file, $errFiles)"
     ngf-pattern="'.pdf'"
     accept="application/pdf" ngf-max-size="20MB">Select ...
</div>

angular func uploadPdf (ctrl as vm):

function uploadPdf( file, errFiles ) {
    vm.pdf = file;
    vm.errorFile = errFiles && errFiles[ 0 ];

    if ( vm.pdf ) {
        Upload
            .upload( {
                url: '/upload',
                data: {
                    file: vm.pdf,
                    new_file_name: vm.new_name//this is the filename I want
                }
            } )
            .then(
                function ( response ) {
                    $timeout( function () {
                        vm.pdf.result = response.data;
                    } );
                }, function ( response ) {
                    if ( response.status > 0 ) {
                        vm.errorQuedanPdfUpload = response.status + ': ' + response.data;
                        console.log( vm.errorQuedanPdfUpload );
                    }
                }
            );
    }
}

express :

var express = require( 'express' ),
    router  = express.Router(),
    util    = require( 'util' ),
    multer  = require( 'multer' );

var storage = multer.diskStorage(
    {
        destination: './uploads/',
        filename: function ( req, file, cb ) {
            //req.body is empty...
            //How could I get the new_file_name property sent from client here?
            cb( null, file.originalname );
        }
    }
);

var upload = multer( { storage: storage } );

router.route( '/upload' )
    .post( upload.single( 'file' ), post );

function post( request, response ) {

    response.json( { message: 'Files Uploaded!' } );

}

最佳答案

var express = require( 'express' ),
    router  = express.Router(),
    util    = require( 'util' ),
    multer  = require( 'multer' );

var storage = multer.diskStorage(
    {
        destination: './uploads/',
        filename: function ( req, file, cb ) {
            //req.body is empty...
            //How could I get the new_file_name property sent from client here?
            cb( null, file.originalname+ '-' + Date.now()+".pdf");
        }
    }
);

var upload = multer( { storage: storage } );

router.route( '/upload' )
    .post( upload.single( 'file' ), post );

function post( request, response ) {

    response.json( { message: 'Files Uploaded!' } );

}

关于node.js - 使用 express/multer 时更改文件名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34035515/

相关文章:

node.js - 从 Express 堆栈中删除中间件的正确方法?

node.js - TypeError [ERR_INVALID_ARG_TYPE] : The first argument must be of type string or an instance of Buffer, ArrayBuffer, or Array or an Array-like Object

javascript - Node.js 和 Express : Pushing to array results in "[object Object]"

javascript - 将 vars 从 ejs 传递到 javascript(渲染时服务器到客户端)同时避免 XSS 问题

javascript - 如何使用 multer 或 body-parser 上传文件

javascript - 当我在 onFileUploadStart() 中包含逻辑时,Multer 不上传文件 - NodeJs

javascript - Node.js 中使用 BodyParser 解析 JSON 嵌套对象

具有 Socket.io 客户端支持的 Node.js 托管?

node.js - 如何将 websocket 放入数据库(mongoDB/mongoose)?

node.js - 使用 Controller 内的 Express 和 Multer 解析请求