您好,登錄后才能下訂單哦!
小編給大家分享一下Node如何上傳文件,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!
首先,我們可以給出一個最初的方案,然后在代碼中不斷進行完善。我給出的方案一是這樣一個簡單邏輯:
那接下來首先我們先來完成第一步:檢驗圖片參數
我這里寫了一個方法用來檢驗圖片參數是否完整,參數要求為一張啟動圖加上四個商品屬性值,如果參數出現不存在的情況,則直接給客戶端返回error.
接下來第二步是實現圖片上傳的邏輯,所以我定義了一個通用的上傳文件方法:
uploadPicsAndCheckPar(req, checkParFunc, maxPic, pathDir, isNeedUid, cb)
我們先來看看參數如何理解:
req: 來源于表單請求checkParFunc: 檢測上傳文件參數的方法maxPic: 圖片最大上傳張數限制pathDir: 服務器保存上傳文件文件夾名稱isNeedUid: 為每張圖片分配一個uidcb: 回調到路由層
首先在config.js中配置上傳文件主目錄:
CONFIG.PICSMAINPATH = '/mnt/test';
接下來生成multiparty對象,并配置上傳目標路徑:
var form = new multiparty.Form({uploadDir: (mainPath + '/picTemp/')});
然后執行圖片上傳操作:
form.parse(req,function (error,fields,files)
到這里上傳圖片就結束了么?當然沒有!別忘了剛才我們說過的對圖片數量,大小等做限制。首先我們先解析參數格式:
檢測上傳圖片數量是否大于我們設置的maxPic,如果超過數量,則刪除上傳的圖片返回error。檢測圖片大小是否超過4M,如果超過4M則刪除圖片返回error。
我們可以看下刪除圖片的邏輯,其實就是循環表單刪除圖片:
接下來我們還得判斷每張圖片的名稱是否只有一個,一張圖片如果出現兩個名稱則刪除圖片返回error:
當然了,我們上傳文件既然準備封裝成公共方法,當然得適配非圖片文件的情況,我這里針對視頻進行了處理:
如果視頻大小符合要求,檢驗參數是否符合接口要求,符合接口要求則重命名視頻名稱。那我們來看看重命名方法如何實現:
首先,我們需要構造路徑,我這里以當前年月日結合uid為路徑,遍歷檢查路徑是否存在,不存在則創建文件夾
最后更新圖片路徑為真實路徑
到這里驗證圖片參數全部通過,上傳圖片成功。給路由層返回參數列表。在路由層進行數據庫層邏輯處理。
到這里一個完整的上傳功能我們就實現完成,接下來我們來測試下上傳接口是否可以正常運轉
可以看到參數如果不完整,直接給客戶端返回對應的錯誤信息。
如果按照剛才我們設定的接口要求傳參,就可以看到我們圖片上傳成功。接下來我們可以看下我們定義的上傳文件夾是否有圖片成功上傳。
可以看到圖片成功上傳,路徑就是以當前年月日作為文件夾。我們可以快速的查看我們所上傳的圖片。當然,如果需要上傳的資源很多,把所有資源都上傳到服務器會給服務器帶來一定的負荷,所以其實我們可以采用將圖片直接上傳到COS中。COS使用其實很便捷,官方有SDK可以直接引入進行使用,這些本篇就不涉及了。
以上是“Node如何上傳文件”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。