node.js+express文件上传简单实例代码

发布时间:2020-03-12编辑:脚本学堂
分享一个node.js+express实现简单文件上传的代码,node.js实现文件上传功能的例子,需要的朋友参考下。

node.js结合express实现文件上传,分为三个部分:上传表单、接收上传文件、保存上传文件。node.js 文件上传代码

实现一个网络应用的时候,碰到一个非常普通的需求:文件上传。
这是我第一次使用Node来做文件上传,所以我通过Google查了很多资料。

Holowaychuk先生一如既往的用令人难以置信的速度回复了我,他的回答让我懂得首先应该做什么:读文档。

1、上传表单
这是整个挑战中最平常的一环,您可能已经非常熟悉了这一部分,无论如何,为了文章的完整性,我还是必须说一下。
你将需要使用一个表单来进行方件上传,我使用Jade来生成HTML代码,它看起来是这样的:
 

复制代码 代码示例:
form(action="…", method="post", enctype="multipart/form-data")
  input(type="file", name="displayImage")


form.action将指向一个文件上传的路由,继续往下看。

2、接收上传文件
如果你使用的是最新版本的Node和Express,那么上传文件是一块小甜饼。
在我们的上传路由里,请求参数是req.files,通过它来设置允许上传文件的类型。它看起来像下面这样:
 

复制代码 代码示例:
{
  displayImage: {
    size: 11885,
    path: ‘/tmp/1574bb60b4f7e0211fd9ab48f932f3ab‘,
    name: ‘avatar.png‘,
    type: ‘image/png‘,
    lastModifiedDate: Sun, 05 Feb 2012 05:31:09 GMT,
    _writeStream: {
      path: ‘/tmp/1574bb60b4f7e0211fd9ab48f932f3ab‘,
      fd: 14,
      writable: false,
      flags: ‘w‘,
      encoding: ‘binary‘,
      mode: 438,
      bytesWritten: 11885,
      busy: false,
      _queue: [],
      drainable: true
    },
    length: [Getter],
    filename: [Getter],
    mime: [Getter]
  }
}
 

在req.files对象下,displayImage属性是你HTML里标记的表单值,req.files将为每一个有效的HTML文件表单包含一个这样的属性。
文件对象包含:类型、文件大小、名字属性,这些属性将用以在服务器端进行判断确认。

3、保存上传文件
假设文件是有效的,下一步将用到文件路径属性,文件一开始将保存到Tmp文件夹里,程序需要将文件从临时目录移到你的目标文件夹中。
 

复制代码 代码示例:
fs.readFile(req.files.displayImage.path, function (err, data) {
  // …
  var newPath = __dirname + "/uploads/uploadedFileName";
  fs.writeFile(newPath, data, function (err) {
    res.redirect("back");
  });
});
 

在fs.readFile的回调函数中,通过文件内容获取数据属性,例子中的应用需要修改文件属性并且将文件保存到一个新的位置,所以fs.writeFile便是用以将文件数据写到一个新的路径下。
如果应用仅是要将文件保存到一个新的位置,可以使用fs.rename来实现。

使用Node加Express上传文件大概就是这样,我曾经使用过许多服务器端的语言如python、Java、Scala和PHP来做文件上传功能,但是我都感觉没有使用Node简单,所以我不认为javascript应该被标记为一种劣质的服务器端语言。