Node.js 文件上传

Formidable 模块

有一个非常好的用于处理文件上传的模块,称为 "Formidable"。

可使用 NPM 下载和安装 Formidable 模块:

C:\Users\ Your Name >npm install formidable

下载 Formidable 模块后,您可以将该模块引用在任何应用程序中:

  1. var formidable = require('formidable');

上传文件

现在,您可以在 Node.js 中创建网页,让用户可以将文件上载到您的电脑:

第 1 步 : 创建 Upload 表单

创建一个 Node.js 文件写入带有 upload(上传)字段的 HTML 表单:

实例

这段代码将产生一个 HTML 表单:

  1. var http = require('http');
  2. http.createServer(function (req, res) {
  3. res.writeHead(200, {'Content-Type': 'text/html'});
  4. res.write('<form action="fileupload" method="post" enctype="multipart/form-data">');
  5. res.write('<input type="file" name="filetoupload"><br>');
  6. res.write('<input type="submit">');
  7. res.write('</form>');
  8. return res.end();
  9. }).listen(8080);

第 2 步 : 解析上传的文件

引用 Formidable 模块,使上传的文件到达服务器后可以解析该文件。

上传和解析文件后,它会被放置在计算机上的临时文件夹中。

实例

将上传该文件,并将其放置在临时文件夹中:

  1. var http = require('http');
  2. <strong>var formidable = require('formidable');
  3. </strong>
  4. http.createServer(function (req, res) {
  5. <strong> if (req.url == '/fileupload') {
  6. var form = new formidable.IncomingForm();
  7. form.parse(req, function (err, fields, files) {
  8. res.write('File uploaded');
  9. res.end();
  10. });
  11. </strong> } else {
  12. res.writeHead(200, {'Content-Type': 'text/html'});
  13. res.write('<form action="fileupload" method="post" enctype="multipart/form-data">');
  14. res.write('<input type="file" name="filetoupload"><br>');
  15. res.write('<input type="submit">');
  16. res.write('</form>');
  17. return res.end();
  18. }
  19. }).listen(8080);

第 3 步: 保存文件

当文件成功上传到服务器时,它将被放置在临时文件夹中。

此目录的路径可以在 "files" 对象中找到,该对象是 parse() 方法回调函数中的第三个参数。

要将文件移动到所选文件夹,请使用 文件系统 模块,然后重命名该文件:

实例

引用 fs 模块,并将文件移动到当前文件夹:

  1. var http = require('http');
  2. var formidable = require('formidable');
  3. <strong>var fs = require('fs');
  4. </strong>
  5. http.createServer(function (req, res) {
  6. if (req.url == '/fileupload') {
  7. var form = new formidable.IncomingForm();
  8. form.parse(req, function (err, fields, files) {
  9. <strong> var oldpath = files.filetoupload.filepath;
  10. var newpath = 'C:/Users/ Your Name /' + files.filetoupload.originalFilename;
  11. fs.rename(oldpath, newpath, function (err) {
  12. if (err) throw err;
  13. res.write('File uploaded and moved!');
  14. res.end();
  15. });
  16. </strong> });
  17. } else {
  18. res.writeHead(200, {'Content-Type': 'text/html'});
  19. res.write('<form action="fileupload" method="post" enctype="multipart/form-data">');
  20. res.write('<input type="file" name="filetoupload"><br>');
  21. res.write('<input type="submit">');
  22. res.write('</form>');
  23. return res.end();
  24. }
  25. }).listen(8080);