咱们应用 form 和 input 控件上传文件到服务器,服务器采取 Node.js 利用接管客户端上传的文件。能够应用 multiparty
这个库文件,解析从客户端提交的本地文件。残缺的源代码如下图所示:
var multiparty = require('multiparty');
var http = require('http');
var util = require('util');
const PORT = 3003;
http.createServer(function(req, res) {if (req.url === '/upload' && req.method === 'POST') {
// parse a file upload
var form = new multiparty.Form();
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 your file">'+
'</form>'
);
}).listen(PORT);
console.log('listen on port:' + PORT);
文件上传的具体实现:
应用 HTML 规范的 form 标签,action 值为 /upload
, 这个值在 Node.js 利用里会再次用到。
enctype 为 multipart/form-data
:
应用 input
控件,属性指定为 file
,multiple 属性为 multiple
,以反对多文件上传。
一旦我在浏览器里输出 http://localhost:3003/ 之后,下列断点就触发:提醒有新的客户端连贯达到:
此时 createServer
里的回调函数,req 的类型为 IncomingMessage,url 字段的值为 /
:
此时返回一个文件上传的网页给客户端:
如下图所示:
选中两个文件后,点击 Upload your files
:
此时 url 变成了 form 里指定的 /upload
,method 变成了 POST:
执行 form.parse
注册回调函数。留神,此时这个回调函数并不会立刻执行。
稍后,当两个本地文件的数据流都残缺上传到服务器之后,注册的回调函数以异步的形式被触发:
在此回调函数里,req 对象不再可用,只能拜访 res(ServerResponse), error, fields, files 这种字段:
咱们在 title 字段输出 Jerry 123
之后,点击 upload 按钮:
能够从 fields 字段取得 title 内容,从 files 字段获取上传的文件的文件名和尺寸,以及本地的绝对路径: