关于使用elementUI直传七牛云上传 and 下载踩坑

Posted yanyanp

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于使用elementUI直传七牛云上传 and 下载踩坑相关的知识,希望对你有一定的参考价值。

这几天一直研究七牛云的,,由于本人对elementUI框架的不熟悉,,踩了很多坑。

首先需要注册一个七牛云,最近快赶上双十一,所以七牛云新用户价格低廉500G*6个月只用了一分钱,废话不多说直接上代码。

先说说上传

前端使用elementUI的<el-upload>组件:

   <el-upload action="http://upload-z2.qiniup.com" :http-request="sliderRequest" :name="fileName" :before-upload="handleUpload" :drag="true" :on-success="handleAvatarSuccess" :on-error="handleError" :on-remove="handleRemove">
  <i class="el-icon-upload"></i>
<div class="el-upload__text">将文件拖到此处,或<em>点击上传</em> </div>
 </el-upload>
 
划个重点好吗,,这里的action用的是七牛上传的地址,,,是你创建的空间在哪个区,我的是华南所以是这个,,敲黑板,这里一定不是加域名那个地址,,我就是这个地方卡了很久,
不得不说elementUI还是很强大的,所以以上组件绑定的函数直接看官方文档就好了,
我这里主要有作用的是http-request函数和before-upload,http-request是上传函数,覆盖默认的上传,因为想发现如果不给固定的key,那上传到七牛云之后文件类型发生了改变,所以我这里自定义了上传函数,,这个函数还是我百度的,至于具体是哪个链接记不清了。
           sliderRequest(upload) {
            // 文件上传自行处理上传
            // 创建FormData对象 添加相关上传参数
            const formData = new FormData()
                // 文件对象
            formData.append(‘file‘, upload.file)
                // key 文件名处理,这样的话七牛会识别文件时什么类型
            formData.append(‘key‘, upload.file.name)
                // token
            formData.append(‘token‘, this.postData.token)//这个postData,要在data数据里面进行定义的,,,我这里调接口使用的是vue的方式
            // 上传文件
            // onUploadProgress 查看axios文档 https://github.com/axios/axios
            axios.post("http://upload-z2.qiniup.com", formData, {
                onUploadProgress: (event) => {
                    // 监听上传进度
                    event.percent = event.loaded / event.total * 100
                    upload.onProgress(event)
                }
            }).then((response) => {
                const res = response.data
                if (res.code === 200) {
                    _this.handleAvatarSuccess();
                }
            }).catch((err) => {
                // 调用组件上传失败方法
                _this.handleError();
            })
        },
 
 handleUpload(file) {
            this.fileName = file.name;
            this.addFormInfo.appendixUrl = "http://cdn.pinea.club/" + file.name;
            this.updateFormInfo.appendixUrl = "http://cdn.pinea.club/" + file.name;
        }
before-upload是上传时的函数,我这里时间添加到数据库的文件地址字段进行了修改,,这里的地址就是带域名的那个了,
 
下载就很简单,一个<a>标签链接一个文件地址即可搞定
    <a v-if="contractInfo.appendixUrl!=null" class=‘download‘ :href=‘contractInfo.appendixUrl‘ download title="下载">下 载</a>
 
 
java后台的token接口:
@RequestMapping(value = "/getQiniuUpToken",produces = { "application/json;charset=UTF-8" })
@ResponseBody
public Response getQiniuUpToken() {
Response response = new Response();
try {
response.setResult(1);
response.setModel(auth.uploadToken(bucketname, null, 3600, new StringMap().put("insertOnly", 1)));
log.info("getQiniuUpToken result:"+response.getResult());
} catch (Exception e) {
log.error("getQiniuUpToken 接口异常",e);
response.setResult(ResultCodeEnum.FAILURE.code);
response.setFailCode(ErrorCodeEnum.SYSTEM_EXCEPTION.errorCode);
response.setFailReason(ErrorCodeEnum.SYSTEM_EXCEPTION.errorDesc);
}
return response;
}

大家一起学习交流

以上是关于关于使用elementUI直传七牛云上传 and 下载踩坑的主要内容,如果未能解决你的问题,请参考以下文章

前端上传图片头像到七牛云格式变成text

关于七牛云存储 资源上传不成功问题

初试“七牛云”--零基础运用七牛云配合UEditor实现图片的上传和浏览(.NET篇)

富文本vue-quill-editor结合element UI--upload做图片上传至七牛云服务器(含node后端)

如何将图片上传到七牛云平台?

ThinkPHP6上传图片七牛云 如何上传文件到七牛云对象储存cos