nodejs之multiparty插件使用簡析
Multiparty是用來解析FormData數據的一款插件,還有一款與之功能相同的插件,叫Formidable。沒有使用過這款插件,這裏就不多說了,只是簡單的提一下。接下來繼續說Multiparty。先提供下官方API鏈接:Click Here。英文版的,英語好的可以去看一下。
使用Multiparty這款插件,首先需要安裝:npm install multipary。然後引用該插件,並實例化插件:。插件的構造函數接收一個對象作為參數,參數是可選的,可以不不穿。參數的屬性有:encoding:formdata的數據設置編碼,默認是utf-8。 maxFieldsSize:限制字段,按字節分配的內存量,默認是2M,超出則會產生錯誤。 maxFields:限制被解析字段的數量,默認為1000。maxFilesSize:此屬性只有在autoFiles為true的時候生效,設置上傳文件接收字節的最大數量。也就是限制最大能上傳多大的文件。autoFields:啟用字段事件,並禁用字段的部分時間。如果監聽字段事件,該屬性自動為true。 autoFiles:啟用文件事件,並禁用部分文件事件,如果監聽文件事件,則默認為true。uploadDir:放置文件的目錄,只有autoFiels為true是有用。
實例化完構造函數後,開始正式解析FormData數據。利用parse()方法來解析。方法接收兩個參數,無返回值。第一個參數為request對象,把創建服務時,回掉函數中的第一個參數傳進去就可以。第二個參數是cb,一個回掉函數,通過該回掉函數,可以獲取到解析後的數據。如果你是上傳文件,使用這個回調函數的話。那我可以很榮幸的告訴你,你不需要在執行寫入文件的工作了,因為插件已經完成了。你只需要設置好uploadDir屬性,然後做些後續操作就可以了。因為回掉函數會默認開啟autoFields和autoFlies。個人感覺應該是內部監聽field和file事件。繼續說回調函數,它有三個參數,第一個參數是err,第二個參數是fields,第三個參數是flies。err是發生錯誤時,返回的異常信息。fields是一個對象,存儲著FormData裏的字段信息。files存儲的是文件信息。如果你把整個file對象直接放進formData內,則有值,否則為空對象。
那自己寫文件,如何寫呢?眾所周知,nodejs是靠事件驅動的,它通過事件來實現異步編程,來達到其它後臺語言多線程的效果。作為基於nodejs實現的插件,事件肯定是必不可少的,而它提供的這些事件,提供了自己寫文件的通道。
part事件,之所以先說這個事件,因為它是實現自己寫文件的關鍵。該事件會在請求中遇到文件數據時觸發,它的回調函數是一個實現可讀流的實例對象。對象提供的屬性有headers:存儲著請求的頭部信息。name:字段名稱。filename:文件名稱。byteFffset:這部分數據,在主體數據中的字節偏移量。byteCount:數據總的字節長度。註意使用part事件時,不要再去監聽fields和files事件。如果監聽了的話,那在part事件中,你將得不到你想要的數據。
這是一段寫文件的代碼僅供參考。
aborted事件會在請求中止時觸發。
close事件會在請求結束之後觸發。
file事件,如果發送的是文件,則可以監聽該事件。監聽此事件,插件會把文件寫到磁盤上,在利用回調返回相關信息。參數一name:字段名稱。參數二file:存儲著文件信息的對象。屬性有:fieldName:字段名稱。originalFilename:文件名稱。path:寫到磁盤上文件的具體路徑。headers:存儲著頭部信息。size:文件具體大小。
field事件,監聽此事件,可以獲取到請求中的具體數據。回調函數兩個參數。name:字段名。value:字段值。
這些就是multiparty插件的一些api的介紹,有寫的不對的地方,還請大神指正。
nodejs之multiparty插件使用簡析