2015-12-02 4 views
2

У меня возникли проблемы с загрузкой в ​​формате PDF, когда я загрузить его (я использую ng-file-upload) файл в формате JSON, что reachs express.js является:Изменить имя файла при использовании экспресс/multer

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

Я бы хотел изменить название свойства, которое я посылаю от угловой выразить, вот все настройки:

HTML элемент:

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

угловая функ uploadPdf (Ctrl, как 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!' }); 

} 
+0

Там нет никаких проблем с угловой. Multer не сохраняет расширение при загрузке файла. –

+0

Проверьте это: https://github.com/expressjs/multer/issues/170 –

+0

Используйте ответ, указанный ricardomoura в приведенной выше ссылке, чтобы выполнить вашу задачу. –

ответ

2
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!' }); 

} 
+1

Хотя этот код может ответить на вопрос, предоставляя дополнительный контекст относительно того, как и/или почему он решает проблему, улучшит долгосрочную ценность ответа. –

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

Настройка, как это в вашем экспресс

+0

имя файла, которое я хочу, отправлено от клиента, так как я могу получить это в функции имени файла diskStorage? –

+0

попробуйте обновить ответ –

+0

И убедитесь, что ваш каталог загрузок, не имеет аналогичной загрузки файла, иначе вы можете перезаписать существующий файл. –

0

В угловых вам нужно переместить 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

Смежные вопросы