elment-ui+七牛上传文件

七牛官网(https://developer.qiniu.com/kodo/sdk/1283/javascript)也介绍了具体的使用方法,现在我做的是直接用的elment-ui上传插件。大部分逻辑都在后台处理,前台只需调用接口即可。接口有三个,分别是获取七牛token的tokenUrl,上传文件时调用的uploadUrl,这是可以在七牛官网上找到的,看自己在中国的哪个区对应着什么地址,北京这边的是华北地区,地址为http://up-z1.qiniup.com/,还有存储文件的接口storageDomain

1.调取获取七牛token,七牛token是上传文件的凭证,获取之后添加到上传文件的post数据对象里。

this.$http.post(tokenUrl)
    .then(res =>{
    this.postQiNiuData.token = res.uploadToken; 
        })
        .catch(function (error) {
            console.log(error);
        });

2.页面结构代码

<el-upload
    :action="uploadUrl"
    :on-preview="handlePreview"
    :on-remove="handleRemove"
    :on-change="handleChange"
    :on-success="handleSuccess"
    :on-error="handleError"
    :file-list="files"
    :data="postQiNiuData"
    :auto-upload="true"
    :limit="5"
    :on-exceed="handleExceed">
    <el-button slot="trigger" size="small" type="primary" :disabled="this.allDisabled">选取文件</el-button>
</el-upload>

3.初始化数据

data() {
    return {
        files: [], // 文件
        uploadToken: '', // 上传文件 token,
        postQiNiuData: {},
    }
}

4.上传文件的方法

(1)上传文件。在上传文件的时候可以对上传的文件名进行修改,定义文件的路径,还可以限制上传文件的数量、类型等。如果不做任何修改返回的结构:
{
    hash:"FgOcdoAagVKYA593bXLC4VjGH531"
    key:"FgOcdoAagVKYA593bXLC4VjGH531"
}

修改之后的结构:

{
    hash:"FqDpAz--qCwXHMyBTV8pQMvZeDn4"
    key:"1535599897264/网址.txt"
}

这就是我们想要的结果,修改的文件名(包含自定义路径)会一起存储到服务器上。

handleChange(file, fileList) {
    let timestamp = (new Date()).valueOf(); //时间戳

    this.postQiNiuData.key = timestamp + '/' + file.name;
    this.fileList = fileList.slice(-5);
},

(2)上传文件成功调用函数。上传文件成功后会返回三个参数,其中response中会携带一个key,这个key就是你修改后的文件名。
handleSuccess(response, file, fileList) {
    let domain = storageDomain,
    key = response.key;
    file.url = storageDomain + key;
    this.allKey.push(key);
    let allFile = '';
    for(let k of this.allKey) {
    allFile += domain + k + ',';
    }
    allFile = allFile.substring(0, allFile.lastIndexOf(','));
    this.ruleForm.attachment = allFile;
},

(3)删除调用
handleRemove(file, fileList) {
    let allFile = '';
    for(let k of fileList) {
        allFile += k.url + ',';
    }
    allFile = allFile.substring(0, allFile.lastIndexOf(','));
    this.ruleForm.attachment = allFile;
},
(4)点击文件时调用。这个方法里主要是想点击文件文件的时候调用文件的路径的路径,直接预览或者下载。
handlePreview(file) {
    let key = file.response.key,
    domain = storageDomain;
    let fileAddress = domain + key;
},
(5)上传失败函数
handleError(err, file, fileList) {
	console.log(err);
	this.$message({
		message: '文件上传失败',
		type: 'error'
            });
        },
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

前端小木

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值