今天總結了下node.js的formidable子產品的使用,下面做一些簡要的說明。
1) 建立formidable.incomingform對象
var form = new formidable.incomingform()
2) form.encoding = 'utf-8' 設定表單域的編碼
3) form.uploaddir = "/my/dir"; 設定上傳檔案存放的檔案夾,預設為系統的臨時檔案夾,可以使用fs.rename()來改變上傳檔案的存放位置和檔案名
4) form.keepextensions = false; 設定該屬性為true可以使得上傳的檔案保持原來的檔案的擴充名。
5) form.type 隻讀,根據請求的類型,取值'multipart' or 'urlencoded'
6) form.maxfieldssize = 2 * 1024 * 1024; 限制所有存儲表單字段域的大小(除去file字段),如果超出,則會觸發error事件,預設為2m
7) form.maxfields = 1000 設定可以轉換多少查詢字元串,預設為1000
8) form.hash = false; 設定上傳檔案的檢驗碼,可以有兩個取值'sha1' or 'md5'.
9) form.multiples = false; 開啟該功能,當調用form.parse()方法時,回調函數的files參數将會是一個file數組,數組每一個成員是一個file對象,此功能需要 html5中multiple特性支援。
10) form.bytesreceived 傳回伺服器已經接收到目前表單資料多少位元組
11) form.bytesexpected 傳回将要接收到目前表單所有資料的大小
12) form.parse(request, [callback]) 該方法會轉換請求中所包含的表單資料,callback會包含所有字段域和檔案資訊,如:
form.parse(req, function(err, fields, files) {
// ...
});
13) form.onpart(part); 你可以重載處理multipart流的方法,這樣做的話會禁止field和file事件的發生,你将不得不自己處理這些事情,如:
form.onpart = function(part) {
part.addlistener('data', function() {
// ...
});
}
如果你隻想讓formdable處理一部分事情,你可以這樣做:
form.onpart = function(part) {
if (!part.filename) {
// 讓formidable處理所有非檔案部分
form.handlepart(part);
}
}
14) formidable.file對象
a. file.size = 0 上傳檔案的大小,如果檔案正在上傳,表示已上傳部分的大小
b. file.path = null 上傳檔案的路徑。如果不想讓formidable産生一個臨時檔案夾,可以在filebegain事件中修改路徑
c. file.name = null 上傳檔案的名字
d. file.type = null 上傳檔案的mime類型
e. file.lastmodifieddate = null 時間對象,上傳檔案最近一次被修改的時間
f. file.hash = null 傳回檔案的hash值
g. 可以使用json.stringify(file.tojson())來格式化輸出檔案的資訊
15) form.on('progress', function(bytesreceived, bytesexpected) {}); 當有資料塊被處理之後會觸發該事件,對于建立進度條非常有用。
16) form.on('field', function(name, value) {}); 每當一個字段/值對已經收到時會觸發該事件
17) form.on('filebegin', function(name, file) {}); 在post流中檢測到任意一個新的檔案便會觸發該事件
18) form.on('file', function(name, file) {}); 每當有一對字段/檔案已經接收到,便會觸發該事件
19) form.on('error', function(err) {}); 當上傳流中出現錯誤便會觸發該事件,當出現錯誤時,若想要繼續觸發request的data事件,則必須手動調用request.resume()方法
20) form.on('aborted', function() {}); 當使用者中止請求時會觸發該事件,socket中的timeout和close事件也會觸發該事件,當該事件觸發之後,error事件也會觸發
21) form.on('end', function() {}); 當所有的請求已經接收到,并且所有的檔案都已上傳到伺服器中,該事件會觸發。此時可以發送請求到用戶端。