在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 函数,打印结果

posted @ 2017-05-15 13:04  Liaofy  阅读(2961)  评论(1编辑  收藏  举报