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

由于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)}));

            });

        }

    });

});

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容