在node中使用promise上傳圖片到七牛雲


為了分攤個人服務器壓力、提升圖片下載上傳的速度,使用七牛雲保存用戶上傳的圖片。

后台基於express搭建的,上傳使用七牛雲第三方nodejs-sdk。由於七牛雲上傳圖片只能單個進行,並且考慮到上傳完成后會做一些事情,於是基於sdk再次封裝了一次,代碼如下:

let qn = require('qn');
let path = require('path');
// 本地文件路徑
let filePaths = ['./public/images/33.jpg', './public/images/1.jpg'];

let client = qn.create({
    accessKey: 'ZfEZGc8IWw_WvLNYa8-J6LCHRifl8Y0Tmz1FOyg3',
    secretKey: 'Y1sMVB-xUbyyrBfCdg1aH0zXY6p2ADTkz7OFLoCk',
    bucket: 'fayinme',  // 在七牛雲創建的空間名字
    origin: 'opo2yekqx.bkt.clouddn.com',    // 使用測試域名
});

let qiniuUpload = (filePaths) => {
    // map()方法返回新的 promise對象數組,
    // 若使用forEach(),報錯:Cannot read property 'Symbol(Symbol.iterator)' of undefined
    // 因為沒有返回值,運行到 return Promise.all(qiniuPromise) 時會返回 undefinded

    let qiniuPromise = filePaths.map(filePath => {

        // key 為上傳到七牛雲后自定義圖片的名稱
        return new Promise((resolve, reject) => {
            let fileName = path.win32.basename(filePath);
            client.uploadFile(filePath, {key: fileName}, function (err, result) {
                if(err) {
                    reject(err);
                }else {
                    resolve(result);
                }
            });
        });
    });

    return Promise.all(qiniuPromise);

};

// 調用函數
qiniuUpload(filePaths).then(res => console.log(res));

注釋:
1、npm install --save qn安裝 qn 模塊后require

2、封裝 qiniuUpload 函數,通過七牛雲上傳后返回一個 promise 對象

  • 2.1 client.uploadFile(filePath, {key: fileName}, callback)
  • filePath: 圖片在本地的路徑。
  • fileName:上傳到七牛雲后自定義的圖片名字,本例使用原圖片名稱。
  • callback:成功后的回調。

3、調用 qiniuUpload 函數,打印結果


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM