使用 express/multer 时更改文件名
Change filename when using 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 发送的 属性 来表达,这是所有设置:
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 );
}
}
);
}
}
快递:
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 storage = multer.diskStorage({
destination: function (req, file, cb) {
cb(null, './uploads/')
},
filename: function (req, file, cb) {
cb(null, file.originalname );
}
});
var upload = multer({ storage: storage });
在你的 express 中这样配置
在Angular中,您需要将new_file_name移动到中的文件之上数据如下:
Upload
.upload( {
url: '/upload',
data: {
new_file_name: vm.new_name, //this is the filename I want
file: vm.pdf
}
} )
基本上浏览器需要在文件之前发送该数据......可以在这里找到更好的解释:https://github.com/expressjs/multer/issues/134
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!' } );
}
我在上传 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 发送的 属性 来表达,这是所有设置:
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 );
}
}
);
}
}
快递:
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 storage = multer.diskStorage({
destination: function (req, file, cb) {
cb(null, './uploads/')
},
filename: function (req, file, cb) {
cb(null, file.originalname );
}
});
var upload = multer({ storage: storage });
在你的 express 中这样配置
在Angular中,您需要将new_file_name移动到中的文件之上数据如下:
Upload
.upload( {
url: '/upload',
data: {
new_file_name: vm.new_name, //this is the filename I want
file: vm.pdf
}
} )
基本上浏览器需要在文件之前发送该数据......可以在这里找到更好的解释:https://github.com/expressjs/multer/issues/134
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!' } );
}