需求
在本地通過 HTML input 元素,支持上傳多個(gè)文本文件到服務(wù)器。
服務(wù)器采取 Node.js 實(shí)現(xiàn),將本地上傳的文本文件內(nèi)容打印出來。
實(shí)現(xiàn)效果
先看一下本文介紹的代碼片段執(zhí)行的效果。
本文介紹的程序,啟動(dòng)了一個(gè)在 3003 端口上監(jiān)聽的服務(wù)器。瀏覽器訪問 :3003本地打印服務(wù)沒有運(yùn)行,能看到如下界面:
點(diǎn)擊 Files,彈出文件上傳對話框,可以選擇上傳多個(gè)本地文本文件。
這里我選擇了本地兩個(gè)名為 1.txt 和 2.txt 的文本文件,內(nèi)容分別為:
選定之后, Files 控件右邊,顯示為 2 files,意思是有兩個(gè)本地文件等待上傳。
點(diǎn)擊上圖的 your file 之后,在服務(wù)器的控制臺,能看到依次打印出第一個(gè)文件的文件名本地打印服務(wù)沒有運(yùn)行,文件內(nèi)容,然后是第二個(gè)文件的文件名,文件內(nèi)容,說明上傳成功:
下面是本需求具體的實(shí)現(xiàn)步驟。
實(shí)現(xiàn)步驟
本需求采取 Node.js 技術(shù)棧實(shí)現(xiàn)。
使用 npm init 命令行新建一個(gè)基于 npm 的 Node.js 項(xiàng)目,.json 文件內(nèi)容如下:
{
"name": "file.upload.test",
"version": "1.0.0",
"author": "Jerry",
"description": "File upload test",
"scripts": {
"start": "ui5 serve",

"build": "ui5 build"
},
"devDependencies": {
"express": "^4.12.4"
},
"dependencies": {
"multiparty": "^4.2.3"
}
}
從 .json 文件的 區(qū)域能看出,我們使用了一個(gè)叫做 的庫。
新建一個(gè) .js 文件,完整源代碼只有 33 行,內(nèi)容如下:
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') {
var form = new multiparty.Form();
form.on('part', function(part) {
console.log(part.filename);
part.setEncoding('utf8');

part.on('data',function (chunk){
console.log(chunk)
});
part.on('end',function (){
console.log('讀取結(jié)束');
});
});
form.parse(req);
}
res.writeHead(200, { 'content-type': 'text/html' });
res.end(

'+
'
'+
'
'+
''+
''
);
}).listen(PORT);
console.log('listen on port:' + PORT);
進(jìn)入 .json 和 .js 文件所在的文件夾,執(zhí)行命令行 npm ,安裝 .json 文件里定義的依賴,然后命令行 node .js, 就可以啟動(dòng)服務(wù)器了:
看到提示消息 on port:3003 說明服務(wù)器啟動(dòng)成功了,接下來按照文件前面提示的步驟進(jìn)行測試即可。