提供修改后的上传文件作为下载AngularJS NodeJS

时间:2016-11-15 17:02:53

标签: angularjs node.js download filenames

我的前端有一个Multer上传:

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

使用Multer上传NodeJS:

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

如何在nother router.get请求中获取此文件名?

在我的NodeJS中我将文件保存到服务器,所以我知道这条路径。 (../上传/)

我想使用<a href="http://<path to file>">Download</a>再次将下载的文件提供给客户端,但如何获取用户上传的文件名? 要使此下载工作吗?

提前谢谢。

1 个答案:

答案 0 :(得分:1)

正如我在评论中所说,你的表格是错误的。 查看angularJs表单提交: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});
});

通过这三件事你应该可以上传文件并收回其名称。 慢慢地,一步一步地开始,你将使它工作。