资讯专栏INFORMATION COLUMN

vue用阿里云oss上传图片使用分片上传只能上传100kb以内的解决办法

entner / 3130人阅读

摘要:首先,和阿里云上传图片结合参考了这位朋友的文章,成功的解决了我用阿里云上传图片前的一头雾水。我把一个上传组件放在了我的打开阿里云上传组件

首先,vue和阿里云oss上传图片结合参考了 这位朋友的 https://www.jianshu.com/p/645... 文章,成功的解决了我用阿里云oss上传图片前的一头雾水。

该大神文章里有写github地址,里面的2.0分支采用vue2.0实现,只不过这个上传图片用的是分片上传,即断点续传,分片上传由于一片是以100kb为起始的,所以当图片大小小于100kb的时候不分片,可以正常上传,当大于100k的时候,会报错如下:

One or more of the specified parts could not be found or the specified entit

当报这个错误的时候,请看看阿里云自己的后台有没有按文档设置

文档地址:https://help.aliyun.com/docum...

exopose header 要设置为 ETag

当成功设置之后,大于100k的就可以成功上传了,但是返回的数据和小于100k的不太一样,

大于100k之后没有直接返回url,只有在res.requestUrls 里可以看到对应的url ,但是后面还会有一个分片上传的id。

返回数据对应如下:

小于100k:

大于100k时:

看了官方文档有关分片上传的方法,表示并没有看懂如何把分片集合上传,文档在此,https://help.aliyun.com/docum... 如有大神看懂,还请多多指教!!不胜感激!!

最终我用截取字符串截取到大于100k的图片的url,实现客户端预览。

我的最终代码如下(这是vue中绑定在 input file上的一个函数):

onFileChange(e) {
        const _this = this;
        axios({
          url: "/oss/get_token",
          method: "GET",
          headers: {"w-auth-token": this.token}
        }).then((res) => {
          var client = new OSS.Wrapper({
            accessKeyId: res.data.accessKeyId,
            accessKeySecret: res.data.accessKeySecret,
            stsToken: res.data.securityToken,
            region: _this.region,
            bucket: _this.bucket
          });
          let files = e.target.files || e.dataTransfer.files;
          if (!files.length)return;
          if (files.length) {
            const fileLen = files.length;
            const currentImgLength=_this.imgList.length;
            const restLength=10-currentImgLength;
            if(currentImgLength>10){
              Toast("图片最多上传十张");
            }else{
              if(fileLen<=restLength){
                for (let i = 0; i < fileLen; i++) {
                  const file = files[i];
                  let date = new Date();
                  let path="wap/life/release/"+this.id+"/"+date.getFullYear()+(date.getMonth()+1)+date.getDate()+date.getHours()+date.getMinutes()+date.getSeconds()+date.getMilliseconds()+ "." + file.name.split(".").pop();
                  let size=file.size;
                  if(Math.round(size/(1024*1024)*100)/100<=2){
                    client.multipartUpload(path, file).then((results) => {
                        if(size>=100*1024){
                          _this.imgList.push(results.res.requestUrls[0].split("?")[0]);
                        }else{
                          _this.imgList.push(results.url);
                        }
                      console.log(results);
                    }).catch((err) => {
                    Toast("上传图片失败,请重试!");
                    });
                  }else{
                    Toast("上传图片不能超过2M,请重试!");
                  }
                }
              }else{
                Toast("图片最多上传十张");
              }
            }
          }
        });

      },

添加照片

这个上传图片的方法实现阿里云多图上传,图片大小限制,调用后台返回的接口 /oss/get_token

获得相应的secret。运用了mint-ui组件。

我把一个upload上传组件放在了我的github:打开vue+阿里云oss上传组件

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

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

相关文章

  • 腾讯阿里对比哪个好?计算优势测评

    摘要:腾讯云和阿里云针对按量计费的云服务器,均要求账户内有一定的余额腾讯云好像没有最低充值要求,充值元即可阿里云要求账户内至少有元余额。基于上述原因,我们分别在腾讯云和阿里云创建最低配版的云数据库和。 云计算市场争夺阿里云作为名副其实的国内业界第一,名声非常大,不过最近 IT 之家的事闹出来之后,我有点庆幸最终没有选择它。腾讯云算是业界老二,而且有着腾讯这个强大的靠山,云服务产品的种类和质量...

    zengdongbao 评论0 收藏0
  • 国内公有大幅降价后,首份一手计算产品评测报告

    摘要:最近国内公有云服务商掀起了一轮降价浪潮,继阿里云上月宣布降价之后,腾讯云也在本月初推出全线降价优惠。上个月阿里云在云栖大会上宣布降价,昨天腾讯云方面也推出了全线降价活动,对包年包月产品均提供了大幅度的降价优惠。 最近国内公有云服务商掀起了一轮降价浪潮,继阿里云上月宣布降价之后,腾讯云也在本月初推出全线降价优惠。本文希望从云计算用户的角度,通过真实的产品使用、评测,对降价后各家的产品性价...

    3fuyu 评论0 收藏0

发表评论

0条评论

entner

|高级讲师

TA的文章

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