问题描述:

I'm having trouble uploading a pdf, when I upload it (I'm using ng-file-upload) the file json that reachs express.js is:

{ 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 }

I'd like to change the name to a property that I send from angular to express, here's all the setup:

html element:

<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 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 });

Configure like this in your express

网友答案:

In Angular you need to move new_file_name to be above file in data as follows:

    Upload
        .upload( {
            url: '/upload',
            data: {
                new_file_name: vm.new_name, //this is the filename I want
                file: vm.pdf
            }
        } )

Basically browser needs to send that data before the file ... Better explanation can be found here: https://github.com/expressjs/multer/issues/134

相关阅读:
Top