关于图片上传到七牛?

来源:7-6 Vue 中实现上传宝贝图片到七牛

拖车板牙爵士

2017-09-05

迫切的希望老师能写一篇手记,能讲述下如何实现图片上传到七牛的思路和实现过程?

我在图片上传到七牛这个坑里待了一个多月了,大神拉我一把,死的心都有。

如果你没空写,那么指点我写,我是这样写的,应该改成什么样子

后端

const qiniu = require('qiniu');
// 本地文件路径
qiniu.conf.ACCESS_KEY = '';
qiniu.conf.SECRET_KEY = '';
exports.upload = function(req,res) {
    const uptoken = (bucket, key) => {
        let putPolicy = new qiniu.rs.PutPolicy(bucket + ':' + key);
        return putPolicy.token();
    }
    const uploadFile = (uptoken, key, localfile) => {
        qiniu.io.putFile(uptoken, key, localFile, extra, function(err, ret) {
            if(!err) {
                // 上传成功, 处理返回值
                return res.json({
                    hash: ret.hash,
                    key: ret.key,
                    per: ret.persistentId
                });
            } else {
                // 上传失败, 处理返回代码
                console.log(err);
            }
        });
    }
    const bucket = 'ipearling';
    const key = req.body.key;
    const token = uptoken(bucket,key,req.files[0].path)
    uploadFile(token,key,req.files[index].path)
}

前端

<template>
    <div id="image">
        <el-upload
                action="https://ovj5zotk8.bkt.clouddn.com"
                :data="dataObj"
                drag
                :multiple="true"
                :before-upload="beforeUpload"
                :on-success='handleSuccess'>
            <i class="el-icon-upload"></i>
            <div class="el-upload__text">将文件拖到此处,或<em>点击上传</em></div>
        </el-upload>
    </div>
</template>
<script type="text/ecmascript-6">
    export default{
        data() {
            return {
                dataObj: { token: '', key: '' },
                image_uri: [],
                fileList: []
            };
        },
        methods: {
            beforeUpload (file) {
                const tath = this;
                const name = file.name;
                const curr = Date.now().toString();
                const key = encodeURI(`${curr}_${name}`);
                return new Promise((resolve, reject) => {
                    this.axios.post('/api/image', { key }).then(res => {
                        console.log(res.data);
                        tath.data.dataObj.token = res.data.token;
                        tath.data.dataObj.key = res.data.key;
                        resolve(true);
                    }).catch(err => {
                        console.log(err);
                        reject(false);
                    });
                });
            },
            handleSuccess() {
                console.log('上传成功');
            }
        }
    };
</script>


写回答

1回答

汐汐

2017-09-05

0
0

开发微信全家桶项目Vue/Node/MongoDB高级技术栈全覆盖

Nuxt/Vue SSR + Koa2 跨栈开发微信公众号+小程序

989 学习 · 401 问题

查看课程