javascript - 通过 AngularJS 和 NodeJS 上传文件,

标签 javascript angularjs node.js multipart formidable

我现在使用的是Express4,想要上传文件到服务器的文件系统。 (例如,将文件保存在 public/files 文件夹中。)

有几个关于如何使用 formidablebusboy 来解析请求的问题,如下例所示:

var formidable = require('formidable'),
    http = require('http'),
    util = require('util');

http.createServer(function(req, res) {
  if (req.url == '/upload' && req.method.toLowerCase() == 'post') {
    // parse a file upload 
    var form = new formidable.IncomingForm();

    form.parse(req, function(err, fields, files) {
      res.writeHead(200, {'content-type': 'text/plain'});
      res.write('received upload:\n\n');
      res.end(util.inspect({fields: fields, files: files}));
    });

    return;
  }

  // show a file upload form 
  res.writeHead(200, {'content-type': 'text/html'});
  res.end(
    '<form action="/upload" enctype="multipart/form-data" method="post">'+
    '<input type="text" name="title"><br>'+
    '<input type="file" name="upload" multiple="multiple"><br>'+
    '<input type="submit" value="Upload">'+
    '</form>'
  );
}).listen(8080);

这样的中间件可以解析 req 来获取元数据,例如文件路径、名称、大小等。但是,如果我想将不同的文件发布到不同的端点,我想使用 angularjs Controller 和服务结构来处理上传。

想知道如何获取文件路径、名称等到 Controller /服务并将它们发布到后端。然后我可以使用以下代码来上传文件。

api.post(url, function(req, res) {
  var fs = require('fs');
  //req.body.path: path of file, like, C:\\user\John\.....
  //req.body.filename: name of file, like images.jpg
  fs.readFile(req.body.path, function(err, data){
    var uploadToPath = './public/files/' + req.body.filename;

    fs.writeFile(uploadToPath, data, function(err){
      if(err) {
        res.send(err);
        return;
      }
    });
  });
});

我还指的是this solution ,但只能获取文件大小等信息,而不能获取非常重要的文件路径。

请指教,非常感谢。

最佳答案

对于 Node/快车端:

查看https://github.com/expressjs/multer

对于 Angular 一侧:

查看https://github.com/danialfarid/ng-file-upload

它使上传和保存单个或多个文件变得非常容易。他们有一个选项可以自动保存到目录。

https://github.com/expressjs/multer#multeropts

关于javascript - 通过 AngularJS 和 NodeJS 上传文件,,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33787580/

相关文章:

javascript - 如何使用 web pack 在 React JS 中从外部 JS 文件导入对象

html - CSS 隐藏与具有绝对位置的 div 重叠的 div 的内容

Node.js:为什么来自 cmd/c dir spawn 的数据事件不输出 'line by line' ?

javascript - 使用 angular.js 和 php 在 $http 请求中的错误回调函数中遇到问题

javascript - 使用 ejs 嵌入用户对象

javascript - 如何在 VSCode 调试器中执行异步函数?

javascript - Mongoose 将请求对象传递给中间件

javascript - 为什么一个计数器工作而另一个不工作? (关闭?)

javascript - 如何在 Firefox Extension 中延迟加载网络 HTTP 请求或在需要时阻止并重新启动?

javascript - 想要在 HTML5 中初始化输入类型 "min"的 ="date"属性,使其具有特定日期格式的日期值