axios + vue-cropper 如何上传base64或者blob格式的截图

发布于 2022-09-11 18:01:29 字数 651 浏览 35 评论 0

先问个题外话,cropper截图支持获取base64和blob格式的数据,这两个有什么区别,如果我从后台,通过以下方式获取file的话,适合哪种格式

HttpServletRequest request
List<MultipartFile> files = ((MultipartHttpServletRequest)request).getFiles("file");

正题,vue-cropper获取截取的图片的信息后,前台如何上传到后台,且后台能用以上方式接收

我封装的axios请求方法部分代码如下

  updateUserIcon(){
    return request({
      url:'user/updateUserIcon',
      method:'post',
    })
  }

以前向后台传递参数都是如下,注:data用的是qs在全局中格式化了的,最后使用格式和parmas一样(好像多说了什么废话)

parmas(data):{
 openID:'123465'
}

这个时候,如果是文件呢,我就不晓得了,再加上还是base64或者blob格式的,更懵逼了,希望有会的大佬能细心说一下,不然新手怕是接受不了

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

根据你的后台代码看,应该后台文件是接收文件,而不是base64
这是我当时发送给七牛的代码,或许你可以参考下

  async saveBack() {
    let file = ioUtil.dataURLtoFile(this.backCropper.getCroppedCanvas().toDataURL());
    this.user.background = URL.createObjectURL(file);
    this.uploadBackLoading = true;
    let result = await this.upload(file, "back");
    this.uploadBackLoading = false;
    if (result.status !== 200) {
      this.$notify({message: result.message});
      return;
    }
    this.isShowTailoringBack = false;
  }
  
  

这里是ioUtil.dataURLtoFile的代码

  dataURLtoFile(dataurl, filename = 'file') {
    let arr = dataurl.split(',');
    let mime = arr[0].match(/:(.*?);/)[1];
    let suffix = mime.split('/')[1];
    let bstr = atob(arr[1]);
    let n = bstr.length;
    let u8arr = new Uint8Array(n);
    while (n--) {
      u8arr[n] = bstr.charCodeAt(n)
    }
    return new File([u8arr], `${filename}.${suffix}`, {type: mime})
  },
  
  
  
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文