2016-11-15 8 views
0

У меня есть Multer загрузить в моем веб-интерфейсе:Предоставлять модифицированную закачанный файл как скачать AngularJS NodeJS

<form id="uploadForm" ng-submit="upload.submit"> 
    <input id="file" type="file" name="file" > 
    <input type="submit" value="Upload" id="submit" class="btn btn-primary" > 
</form> 

в мой контроллер загрузки:

this.submit = function(){ 
      $http.post('/upload').then(function success(response){ 
      }, function error(response){ 
}) 
} 

загрузка NodeJS с Multer:

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

router.post('/upload', upload.single('file'), function(req, res, next){ 

    if(!req.file) { 
     res.status(400); 
     res.send({error: 'Datei nicht vorhanden'}); 
     } 
    res.send({filename: req.file.filename}); 
}) ;  

Как я могу получить это имя файла в запросе router.get?

В моем NodeJS я сохраняю файл на сервере, поэтому я знаю этот путь. (../uploads/)

Я хочу предоставить загруженный файл для загрузки клиенту снова с помощью <a href="http://<path to file>">Download</a>, но как получить имя файла, загруженного пользователем? Чтобы эта загрузка работала?

Благодарим вас заблаговременно.

+0

Если вы используете угловой, вам нужно избавиться от «действия», «метода», «enctype». Обращайтесь с представлением формы в своем контроллере, и там вы получите ответ. – yBrodsky

+0

Я использую контроллер, добавив его выше. – nolags

+0

Я имел в виду ваш контроллер angularjs. В любом случае в вашей функции backend/upload вы должны вернуть имя загруженного файла. – yBrodsky

ответ

1

Как я уже сказал в комментарии, ваша форма неверна. ЗАКАНЧИВАТЬ angularJs форма submittion: https://docs.angularjs.org/api/ng/directive/ngSubmit

Как для загрузки файла, проверьте следующее: https://github.com/danialfarid/ng-file-upload

Я заметил, что вы используете multer, вот вам пример из приложения шахты:

var multer = require('multer'); 
var path = require('path'); 
var fs = require('fs'); 

var storage = multer.diskStorage({ 
    destination: function (req, file, cb) { 
    cb(null, 'public/images/banks') 
    }, 
    filename: function (req, file, cb) { 
    crypto.pseudoRandomBytes(16, function (err, raw) { 
     cb(null, raw.toString('hex') + path.extname(file.originalname)); 
    }); 
    } 
}); 
var upload = multer({storage: storage}); 

router.post('/uploadImage', upload.single('file'), function (req, res, next) { 
    if(!req.file) { 
    res.status(400); 
    res.send({error: 'No se pudo subir el archivo'}); 
    } 

    res.send({filename: req.file.filename}); 
}); 

С этими тремя вещами вы сможете загрузить файл и получить обратно свое имя. Начните медленно и шаг за шагом, и вы заставите его работать.

+0

Спасибо, он отлично работает. Но когда я отправлю загрузку, появится новая страница с {"filename": "Untitled Document 1"}. Почему он открывает новую страницу и как я могу заставить ее не загружать новую страницу? – nolags

+0

Удалите атрибут «действие» из вашей формы. – yBrodsky

+0

Как подключить его к контроллеру? – nolags

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

  • Нет связанных вопросов^_^