canvas等base64格式上传到服务端直传到oss

一般来说,我们用画布,html2canvas这些获取的都为base64格式的

html2canvas(document.body, {
  onrendered: function (canvas) {
  console.log('。。。。。。', canvas.toDataURL("image/png"));
  },
});
但是上传到oss是不可以直接上传base64的,需要把base64转换成blob,然后把blob转换成file文件的形式
我们在之前拿到了base64文件,现在把他转换成blob形式的:
var _fileBlob = dataURLtoBlob(base);
function dataURLtoBlob(dataurl) {
  var arr = dataurl.split(','), mime = arr[0].match(/:(.*?);/)[1],
  bstr = atob(arr[1]), n = bstr.length, u8arr = new Uint8Array(n);
  while (n--) {
    u8arr[n] = bstr.charCodeAt(n);
  }
  return new Blob([u8arr], { type: mime });
}
最后把blob转换成file文件形式:
let fileOfBlob = new File([_fileBlob], new Date() + '.jpg');
//这里默认上传为jpg格式的
即可把这个ileOfBlob加到var request = new FormData();这里来:
request.append('file', fileOfBlob);
 
值得注意的是,好像oss上传有顺序规则
1.request.append('name', 'Picture_G_Balloon.jpg');
2.request.append('key', random_name);
3.request.append("policy", data.policy);//policy规定了请求的表单域的合法性
4.request.append("OSSAccessKeyId", data.ossaccessKeyId);//Bucket 拥有者的Access Key Id。
5.request.append("success_action_status", '200');// 让服务端返回200,不然,默认会返回204
6.request.append("Signature", data.signature);//根据Access Key Secret和policy计算的签名信息,OSS验证该签名信息从而验证该Post请求的合法性
7request.append('file', fileOfBlob);
貌似要这样的顺序,不然会报错,很奇怪,不知道是不是后台上传的设置。。。

posted on   sss大辉  阅读(1345)  评论(0编辑  收藏  举报

编辑推荐:
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

导航

统计

点击右上角即可分享
微信分享提示