HTML + Node.js 文件上传

Posted

技术标签:

【中文标题】HTML + Node.js 文件上传【英文标题】:HTML + Node.js File Upload 【发布时间】:2016-02-14 20:14:48 【问题描述】:

请帮我解决这个问题。 我得到空值作为结果

HTML 代码

<form method="post" enctype="multipart/form-data" action="/file-upload">
    <input type="text" name="username">
    <input type="password" name="password">
    <input type="file" name="thumbnail">
    <input type="submit">
</form>

Node.js

var express = require('express');
var http = require('http');
var request = require('request');
var bodyParser = require('body-parser');    

var app = express();
app.use(express.static(__dirname + '/app/'));

// parse urlencoded request bodies into req.body
app.use(bodyParser.urlencoded( extended: true ));

var server = app.listen(8080,function()
 console.log("Node.js image upload");
);

app.post('/file-upload', function(req, res, next) 
 console.log(req.body);
 console.log(req.files);
 res.writeHead(200, 'Content-Type': 'text/plain');
 res.end('Success\n');
);

【问题讨论】:

【参考方案1】:

您可以使用 npm 模块formidable 来提供表单多部分数据。下面是一个例子:

 app.post('/file-upload', function(req, res, next) 
  var form = new formidable.IncomingForm();
  form.parse(req, function(err, fields, files) 
    console.log('form parse');
  );

 form.on('field',function(name,value)
    console.log('in field',name,value);//gives you the field names with value
  );
  form.on('file',function(name,value)
   console.log('in file');
  );

   form.on('end', function(fields, files) 
     this.openedFiles[x].path; //gives the file path
   );
);

【讨论】:

【参考方案2】:

由于表单中的enctype="multipart/form-data",您遇到了问题。您需要安装 multer 包来处理这些问题。

基本用法是这样的:

//Include the package
var multer  = require('multer');
var uploadTmp = multer( dest: 'uploads/' );

// Use a middleware to handle files
app.post('/file-upload',uploadTmp.single('thumbnail'), function(req, res, next) 

【讨论】:

【参考方案3】:

body-parser 无法处理多部分/表单数据

您应该使用multer 或busboy 之类的东西

处理 multipart/form-data 需要一些复杂的逻辑,每个处理它的包都有很多设置

【讨论】:

以上是关于HTML + Node.js 文件上传的主要内容,如果未能解决你的问题,请参考以下文章

node.js 中,先上传文件,上传完成之后点击超链接,跳转到download操作,怎样实现文件的下载

使用 Express 和 Node JS 在 MongoDB 中上传文本文件

node.js框架express文件上传操作

node.js - 安全的图像文件上传

node.js上传下载pdf文件

在 Backand 如何从 node.js 操作上传文件?