vue+elementui 图片上传七牛云

(这是前端上传七牛云,和服务器端上传不同,服务器上传是调java接口将图片上传至自己服务器,通过服务器为中转在上传七牛云,有点浪费服务器性能,因此选择前端上传)
1、前端调用后端接口获取uploadToken

2、通过accessKey和sercetKey构建认证对象,通过认证对象设置空间名获取token

3、返回给前端需要的参数

4、前端通过vue+elementui上传文件,只要封装好上传的文件对象和文件名的一些属性成dataObj然后指定上传路径即可

dataObj所有参数如下:

_self.dataObj.key = response.data.dir + '/'+getUUID()+'_'+file.name;
_self.dataObj.dir = response.data.dir;
_self.dataObj.host = response.data.host;

后端具体代码:

@GetMapping("policy")
    public Resp<Object> policy(){
        String accessKey = "";
        String secretKey = "";
        String bucket = "";
        String host = "";
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        String dir = sdf.format(new Date());
        Auth auth = Auth.create(accessKey, secretKey);
        String upToken = auth.uploadToken(bucket);
        log.info("获取到上传图片的token为:{}"+upToken);
        Map<String, String> respMap = new LinkedHashMap<String, String>();
        respMap.put("upToken", upToken); //获取的token
        respMap.put("dir", dir);  //自定义的文件目录
        respMap.put("host", host);  //七牛云上传成功域名地址,如 http://cdn.ctillnow.com
        return Resp.ok(respMap);
    }

前端具体代码:

1、elupload组件:

<el-upload
  action="http://upload.qiniup.com/"
  :data="dataObj"
  list-type="picture"
  :multiple="false" :show-file-list="showFileList"
  :file-list="fileList"
  :before-upload="beforeUpload"
  :on-remove="handleRemove"
  :on-success="handleUploadSuccess"
  :on-preview="handlePreview">
  <el-button size="small" type="primary">点击上传</el-button>
  <div slot="tip" class="el-upload__tip">只能上传jpg/png文件,且不超过10MB</div>
</el-upload>

2、处理函数:

methods: {
  emitInput(val) {
    this.$emit('input', val)
  },
  handleRemove(file, fileList) {
    this.emitInput('');
  },
  handlePreview(file) {
    this.dialogVisible = true;
  },
  beforeUpload(file) {
    console.log("上传之前文件信息;",file)
    let _self = this;
    return new Promise((resolve, reject) => {
      policy().then(response => {
        _self.dataObj.token = response.data.upToken;
        _self.dataObj.key = response.data.dir + '/'+getUUID()+'_'+file.name;
        _self.dataObj.dir = response.data.dir;
        _self.dataObj.host = response.data.host;
        resolve(true)
      }).catch(err => {
        reject(false)
      })
    })
  },
  handleUploadSuccess(res, file) {
    console.log("上传成功...")
    this.showFileList = true;
    this.fileList.pop();
    this.fileList.push({name: file.name, url: this.dataObj.host + '/' + this.dataObj.key });
    this.emitInput(this.fileList[0].url);
  }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值