node+express 实现阿里云OSS图片上传

2019-01-23  本文已影响0人  彬彬彬boboc

由于SDK基于ES6开发,使用了Generator Function使得用户能够方便地用同步的方式异步的代码,需要配合co使用。具体可参考这篇博客。使用同步方式还需要安装co。这里方式同上。

// 初始化Client

var co = require('co');  

var OSS = require('ali-oss');

var client = new OSS({

  region: 'oss-cn-shanghai',

  accessKeyId: '<Your AccessKeyId>',

  accessKeySecret: '<Your AccessKeySecret>',

  bucket: '<Your bucket name>'

});

var ali_oss = {

    bucket: '<Your bucket name>',

    endPoint: 'oss-cn-shanghai.aliyuncs.com',

}

router.post('/addimgfile', function(req, res, next){

    // console.log(req.body.imgfiles);

    // 图片数据流

    var imgData = req.body.imgfiles;

    // 构建图片名

    var fileName = Date.now() + '.png';

    // 构建图片路径

    var filePath = './tmp/' + fileName;

    //过滤data:URL

    var base64Data = imgData.replace(/^data:image\/\w+;base64,/, "");

    var dataBuffer = new Buffer(base64Data, 'base64');

    fs.writeFile(filePath, dataBuffer, function(err) {

        if(err){

          res.end(JSON.stringify({status:'102',msg:'文件写入失败'}));

        }else{

            var localFile = filePath;

            var key = fileName;

            // 阿里云 上传文件

            co(function* () {

              client.useBucket(ali_oss.bucket);

              var result = yield client.put(key, filePath);

              var imageSrc = 'http://images-funcode.oss-cn-beijing.aliyuncs.com/' + result.name;

        //    上传之后删除本地文件         

              fs.unlinkSync(filePath); 

              res.end(JSON.stringify({status:'100',msg:'上传成功',imageUrl:imageSrc}));

            }).catch(function (err) {

              res.end(JSON.stringify({status:'101',msg:'上传失败',error:JSON.stringify(err)}));

            });

        }

    });

});

上一篇下一篇

猜你喜欢

热点阅读