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

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

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

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

文档地址:https://help.aliyun.com/document_detail/32069.htm

exopose header 要设置为 ETag

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

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

返回数据对应如下:

小于100k:

大于100k时:

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

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

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

  1. onFileChange(e) {
  2. const _this = this;
  3. axios({
  4. url: "/oss/get_token",
  5. method: 'GET',
  6. headers: {'w-auth-token': this.token}
  7. }).then((res) => {
  8. var client = new OSS.Wrapper({
  9. accessKeyId: res.data.accessKeyId,
  10. accessKeySecret: res.data.accessKeySecret,
  11. stsToken: res.data.securityToken,
  12. region: _this.region,
  13. bucket: _this.bucket
  14. });
  15. let files = e.target.files || e.dataTransfer.files;
  16. if (!files.length)return;
  17. if (files.length) {
  18. const fileLen = files.length;
  19. const currentImgLength=_this.imgList.length;
  20. const restLength=10-currentImgLength;
  21. if(currentImgLength>10){
  22. Toast('图片最多上传十张');
  23. }else{
  24. if(fileLen<=restLength){
  25. for (let i = 0; i < fileLen; i++) {
  26. const file = files[i];
  27. let date = new Date();
  28. 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();
  29. let size=file.size;
  30. if(Math.round(size/(1024*1024)*100)/100<=2){
  31. client.multipartUpload(path, file).then((results) => {
  32. if(size>=100*1024){
  33. _this.imgList.push(results.res.requestUrls[0].split("?")[0]);
  34. }else{
  35. _this.imgList.push(results.url);
  36. }
  37. console.log(results);
  38. }).catch((err) => {
  39. Toast('上传图片失败,请重试!');
  40. });
  41. }else{
  42. Toast('上传图片不能超过2M,请重试!');
  43. }
  44. }
  45. }else{
  46. Toast('图片最多上传十张');
  47. }
  48. }
  49. }
  50. });
  51.  
  52. },
  1. <div class="uploadBox">
  2. <!--<input type="file" accept="image/gif,image/jpeg,image/jpg,image/png,image/svg" multiple @change="onFileChange">-->
  3. <input type="file" accept="image/*" multiple @change="onFileChange">
  4. <div>
  5. <svg class="icon-jia icon" aria-hidden="true">
  6. <use xlink:href="#icon-jia"></use>
  7. </svg>
  8. <p>添加照片</p>
  9. </div>
  10. </div>

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

  1. /oss/get_token

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

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

  1.  

vue用阿里云oss上传图片使用分片上传只能上传100kb以内的解决办法的更多相关文章

  1. The difference between the request time and the current time is too large.阿里云oss上传图片报错

    The difference between the request time and the current time is too large. 阿里云oss上传图片的时候报错如上, 解决办法,把 ...

  2. laravel使用阿里云OSS上传图片

    需要自己注册阿里云账号并且开通oss服务,建立Bucket存储空间,此步骤不做演示 一.composer安装:使用composer在项目根目录执行以下命令 composer require johnl ...

  3. 阿里云oss上传图片

    1.首先我们要下载阿里云oss的sdk包:(可以下载原版的,改过的通用版在本人的百度云,嘎嘎嘎~) 2.下载好之后放到项目文件目录里面 3.要在需要的控制器引用这个sdk文件例如: include(& ...

  4. laravel下使用阿里云oss上传图片

    对小公司而言,使用阿里云oss比直接买硬盘要划算的多,不管从存储性价比上还是从网速负载上.最近因为公司的项目有比较大的图片存储访问需求,所以决定使用阿里云的oss. 在研究了一下以后,摆着不自己造轮子 ...

  5. 关于阿里云OSS上传图片之后会被旋转90度的解决办法

    原文:https://www.cnblogs.com/wuhjbk/p/10133596.html 问题描述:正常的图片前端上传到oss成功之后的资源地址.在html上引用的时候被旋转了90度oss资 ...

  6. 阿里云OSS上传图片,并使用图片服务裁切

    <?php use OSS\OssClient; require_once './autoload.php'; // test $bucket = "在阿里云设置的bucket名字(这 ...

  7. 阿里云oss上传图片报错,The OSS Access Key Id you provided does not exist in our records.解决方法

    vue项目 1.安装OSS的Node SDK npm install ali-oss --save 2.参考官方提示https://help.aliyun.com/document_detail/11 ...

  8. 使用阿里云OSS,上传图片时报错:java.lang.ClassNotFoundException:org.apache.http.ssl.TrustStrategy

    问题产生的原因就是jar包版本问题,阿里的SDk引入的pom中依赖的httpclient和httpcore版本高于当前项目中已经设置的版本. 解决: 删除低版本后,更新下项目.

  9. PHP 上传文件至阿里云OSS对象存储

    简述 1.阿里云开通对象存储服务 OSS 并创建Bucket 2.下载PHP SDK至框架扩展目录,点我下载 3.码上code 阿里云操作 开通对象存储服务 OSS 创建 Bucket 配置Acces ...

随机推荐

  1. 猥琐百度杯猥琐CTF

    其实不难,但是作为我这个代码菜鸡+脑洞菜鸡+黑阔菜鸡而言确实挺难. 题目源码: <?php error_reporting(0); session_start(); require('./fla ...

  2. Java8中list转map

    第一种: 取list中某2个字段作为Map的K,V public Map<Long, String> getIdNameMap(List<Account> accounts) ...

  3. android开发(27) 看看我的手机里都有什么传感器

    想看看我的HTC ONE x 具有什么传感器.写个代码RUN一下. 代码很简单,直接贴了 package zyf.demo.sensordemo; import java.util.List; imp ...

  4. avcodec_open2()分析

    该函数用于初始化一个视音频编解码器的AVCodecContext. int avcodec_open2(AVCodecContext *avctx, const AVCodec *codec, AVD ...

  5. Materialize快速入门教程

    https://materializecss.com/ https://github.com/Dogfalo/materialize http://www.materializecss.cn/ 1,下 ...

  6. ggplot2 subscript in x-axis labels(ticks, legend)

    #==============================# ggplot2: subscript in x-axis labels(ticks) rm(list=ls(all=TRUE))lib ...

  7. 你应该知道的CSS2.0中最常用的18条技巧

    一.使用css缩写 使用缩写可以帮助减少你CSS文件的大小,更加容易阅读.  具体内容请浏览:CSS常用缩写语法 二.明确定义单位,除非值为0. 忘记定义尺寸的单位是CSS新手普遍的错误.在HTML中 ...

  8. A SIMPLE LIBRARY TO BUILD A DEEP ZOOM IMAGE

    My current project requires a lot of work with Deep Zoom images. We recently received some very high ...

  9. 《FPGA全程进阶---实战演练》第十章 数码管实验

    1基础理论部分 led数码管是由多个发光二极管封装在一起组合的“8”字型的器件,引线内部已经完成,如下图10.1所示,图10.2为实物图. 图10.1 数码管内部结构 那么我们想要控制数码管的亮灭,其 ...

  10. C语言简明数据类型指南

    一.常用的数据类型 char:字符在计算机的存储器中以字符编码的形式保存,字符编码是一个数字,因此在计算机看来,A与数字65完全一样(65是A的ASCII码). int:如果要保存一个整数,通常可以使 ...