资讯专栏INFORMATION COLUMN

七牛云上传截图后的base64位遇到的问题总结

张汉庆 / 3036人阅读

摘要:,具体实现源码上传图片获取地址获取创建对象,用于和服务器交换数据存储函数,每当改变,便会调用该函数上传成功最终终于实现了七牛云上传的问题,如果还有问题的可以下方留言

最近公司内部项目遇到上传base64位图片到七牛云,并且自定义key存储,在解决过程遇到很多问题,但是最终经过请教,都得到结果,故在这里总结一下...

官方文档

1,布局代码如下:

Picture

2,引入截图插件cropperjs

import Cropper from "cropperjs"

3,初始化裁切框

var self = this;
var image = document.getElementById("image");
this.cropper = new Cropper(image, {
  aspectRatio: 1,
  viewMode: 1,
  background:false,
  zoomable:false,
  ready: function () {
    self.croppable = true;
  }
});

4,changge,裁切代码忽略,具体参考cropperjs的封装

5,接下来是上传过程需要注意的事情

上传域名,具体查看七牛云官网。https://developer.qiniu.com/k...

url地址:http://upload-z2.qiniu.com/pu...
其中http://upload-z2.qiniu.com/pu...,Fsize为文件大小是必填项。获取文件大小的时候,切 记要通过文件流的方式获取。而不是通过图片标签然后转换后获取。图片没经过 base64 处理的原图字节大小。key值是非必填的,如果上传需要指定一个标识,则需要填写。具体值通过服务端返回的mediaKey进行转换。因为公司服务端的mediaKey与上传完成生成的hashCode值对应不上,其中遇到比较大问题,最后看到官网的源码,服务端给到的mediaKey还需要进行转换成base64。

6,具体实现源码

uploadImg () {//上传图片
  this.$http.get("获取token地址").then(res => {
    if(res.data.code === 1){//获取token
      this.putb64(res.data.data.token,res.data.data.mediaKey,this.headerImage);
    }
  })
}   
putb64(token, key, imageBase64){
      let pic = imageBase64.replace(/^.*?,/, "");
      let size = this.fileSize(pic);
      let url = "http://upload-z2.qiniu.com/putb64/"+size+"/key/"+this.baseCode64(key);
      //创建XMLHttpRequest对象,用于和服务器交换数据
      var xhr = new XMLHttpRequest();
      //onreadystatechange: 存储函数,每当readystate改变,便会调用该函数
      xhr.onreadystatechange = function(){
         if (xhr.readyState == 4){
           if(xhr.status === 200){
             alert("上传成功...")
           }
         }
      }
      xhr.open("POST", url, true);
      xhr.setRequestHeader("Content-Type", "application/octet-stream");
      xhr.setRequestHeader("Authorization", "UpToken " + token);
      xhr.send(pic);
},
baseCode64(input){
  var _keyStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
  var output = "";
  var chr1, chr2, chr3, enc1, enc2, enc3, enc4;
  var i = 0;
  input = this._utf8_encode(input);
  while (i < input.length) {
      chr1 = input.charCodeAt(i++);
      chr2 = input.charCodeAt(i++);
      chr3 = input.charCodeAt(i++);
      enc1 = chr1 >> 2;
      enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);
      enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);
      enc4 = chr3 & 63;
      if (isNaN(chr2)) {
          enc3 = enc4 = 64;
      } else if (isNaN(chr3)) {
          enc4 = 64;
      }
      output = output +
      _keyStr.charAt(enc1) + _keyStr.charAt(enc2) +
      _keyStr.charAt(enc3) + _keyStr.charAt(enc4);
  }
  return output;
},
_utf8_encode(string) {
        string = string.replace(/
/g,"
");
        var utftext = "";
        for (var n = 0; n < string.length; n++) {
            var c = string.charCodeAt(n);
            if (c < 128) {
                utftext += String.fromCharCode(c);
            } else if((c > 127) && (c < 2048)) {
                utftext += String.fromCharCode((c >> 6) | 192);
                utftext += String.fromCharCode((c & 63) | 128);
            } else {
                utftext += String.fromCharCode((c >> 12) | 224);
                utftext += String.fromCharCode(((c >> 6) & 63) | 128);
                utftext += String.fromCharCode((c & 63) | 128);
            }

        }
      return utftext;
    }

最终终于实现了七牛云上传base64的问题,如果还有问题的可以下方留言....

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/92647.html

相关文章

  • 使用牛云存储一些经验总结

    摘要:原文使用七牛云存储的一些经验总结错误处理如果在与七牛的交互中出现状态码为的错误,一句话,不要犹豫,直接联系七牛技术支持。但是笔者发现,在使用七牛云转化后的视频,这样做是无效的。 近段时间将使用七牛云存储来存放用户上传的数据,客户端通过七牛的js-sdk与七牛交互,服务端C#实现了七牛相关的接口。在这过程中多多少少遇到点问题,在这里总结一下。原文:使用七牛云存储的一些经验总结 599错...

    Lyux 评论0 收藏0
  • 原创Windows版本服务器数据备份bat批处理-用七牛自动备份VPS中网站数据

    摘要:截图顺应网友需求写了版本的服务器备份程序七牛云存储。七牛的,到获取,登录七牛后在七牛的帐号设置密钥中可找到。 QQ截图20140212171616 顺应网友需求写了Windows版本的服务器备份程序for七牛云存储。老规矩,为了数据安全,用开放源代码的bat来编写。 Linux版本见:http://wyr.me/314.html 备份程序下载(还是那句话,为了安全,你可以去七牛官方...

    Cobub 评论0 收藏0
  • 聊聊毕业设计系列 --- 系统实现

    摘要:七牛云接入本系统的图片,音视频是放在七牛云,所以需要接入七牛云。在服务端通过接口请求来获取七牛云上传,客户端获取到七牛云,通过不同方案将带上。 效果展示 showImg(https://user-gold-cdn.xitu.io/2018/8/26/16576a709bd02f5f?w=1409&h=521&f=gif&s=30128195); showImg(https://user...

    null1145 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<