egg,七牛云上传图片

这是我的service 文件,

const Service = require('egg').Service
const qiniu = require('qiniu')
const path = require('path')

const sendToWormhole = require('stream-wormhole')
//需要填写你的 Access Key 和 Secret Key
qiniu.conf.ACCESS_KEY = ''
qiniu.conf.SECRET_KEY = ''

//要上传的空间
const bucket = ''
let mac = new qiniu.auth.digest.Mac(qiniu.conf.ACCESS_KEY, qiniu.conf.SECRET_KEY)
const options = {
    scope: bucket,
    expires: 60 * 60
}

class Qiniu extends Service {
    /**
     * @desc 七牛云文件上传
     * */
    async uploadFile (stream) {
        const { ctx, app } = this
        const filename = Date.now() + '' + Number.parseInt(Math.random() * 10000) + path.extname(stream.filename)
        let uploadToken = await app.redisGet('uploadToken:token')//从redis获取七牛上传token
        if (!uploadToken) {//如果不存在,就重新生成一个
            let putPolicy = new qiniu.rs.PutPolicy(options)
            uploadToken = putPolicy.uploadToken(mac)
            await app.redisSet('uploadToken:token', uploadToken, options.expires)
        }
        let config = new qiniu.conf.Config()
        config.zone = qiniu.zone.Zone_z2
        const formUploader = new qiniu.form_up.FormUploader(config)
        const putExtra = new qiniu.form_up.PutExtra()
        try {
            const data = await new Promise((resolve, reject) => {
                /*
                * formUploader 有好几种上传方法,
                * putStream 数据流上传
                * put 表单上传
                * putFile 指定本地文件上传
                * */
                formUploader.putStream(uploadToken, filename, stream, putExtra, function (respErr,
                    respBody, respInfo) {
                    if (respErr) {
                        return reject(respErr)
                    }
                    if (respInfo.statusCode === 200) {
                        resolve(respBody.key)
                    } else {
                        return reject(respBody)
                    }
                })
            })
            return {
                filePath: app.config.qiniuUrl + data,
                savePath: data
            }
        } catch (e) {
            // 必须将上传的文件流消费掉,要不然浏览器响应会卡死
            await sendToWormhole(stream)
            return JSON.stringify(e)
        }
    }
}

module.exports = Qiniu

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值