需求
在本地通過 HTML input 元素,支持上傳多個文本文件到服務器。
服務器采取 Node.js 實現,將本地上傳的文本文件內容打印出來。
實現效果
先看一下本文介紹的代碼片段執行的效果。
本文介紹的程序,啟動了一個在 3003 端口上監聽的服務器。瀏覽器訪問 :3003本地打印服務沒有運行,能看到如下界面:
點擊 Files,彈出文件上傳對話框,可以選擇上傳多個本地文本文件。
這里我選擇了本地兩個名為 1.txt 和 2.txt 的文本文件,內容分別為:
選定之后, Files 控件右邊,顯示為 2 files,意思是有兩個本地文件等待上傳。
點擊上圖的 your file 之后,在服務器的控制臺,能看到依次打印出第一個文件的文件名本地打印服務沒有運行,文件內容,然后是第二個文件的文件名,文件內容,說明上傳成功:
下面是本需求具體的實現步驟。
實現步驟
本需求采取 Node.js 技術棧實現。
使用 npm init 命令行新建一個基于 npm 的 Node.js 項目,.json 文件內容如下:
{
"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 文件的 區域能看出,我們使用了一個叫做 的庫。
新建一個 .js 文件,完整源代碼只有 33 行,內容如下:
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('讀取結束');
});
});
form.parse(req);
}
res.writeHead(200, { 'content-type': 'text/html' });
res.end(

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