vue用阿里云oss上传图片使用分片上传只能上传100kb以内的解决办法
首先,vue和阿里云oss上传图片结合参考了 这位朋友的 https://www.jianshu.com/p/645f63745abd 文章,成功的解决了我用阿里云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/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上的一个函数):
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('图片最多上传十张');
}
}
}
});
},
<div class="uploadBox">
<!--<input type="file" accept="image/gif,image/jpeg,image/jpg,image/png,image/svg" multiple @change="onFileChange">-->
<input type="file" accept="image/*" multiple @change="onFileChange">
<div>
<svg class="icon-jia icon" aria-hidden="true">
<use xlink:href="#icon-jia"></use>
</svg>
<p>添加照片</p>
</div>
</div>
这个上传图片的方法实现阿里云多图上传,图片大小限制,调用后台返回的接口
/oss/get_token
获得相应的secret。运用了mint-ui组件。
我把一个upload上传组件放在了我的github:打开vue+阿里云oss上传组件
vue用阿里云oss上传图片使用分片上传只能上传100kb以内的解决办法的更多相关文章
- 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上传图片的时候报错如上, 解决办法,把 ...
- laravel使用阿里云OSS上传图片
需要自己注册阿里云账号并且开通oss服务,建立Bucket存储空间,此步骤不做演示 一.composer安装:使用composer在项目根目录执行以下命令 composer require johnl ...
- 阿里云oss上传图片
1.首先我们要下载阿里云oss的sdk包:(可以下载原版的,改过的通用版在本人的百度云,嘎嘎嘎~) 2.下载好之后放到项目文件目录里面 3.要在需要的控制器引用这个sdk文件例如: include(& ...
- laravel下使用阿里云oss上传图片
对小公司而言,使用阿里云oss比直接买硬盘要划算的多,不管从存储性价比上还是从网速负载上.最近因为公司的项目有比较大的图片存储访问需求,所以决定使用阿里云的oss. 在研究了一下以后,摆着不自己造轮子 ...
- 关于阿里云OSS上传图片之后会被旋转90度的解决办法
原文:https://www.cnblogs.com/wuhjbk/p/10133596.html 问题描述:正常的图片前端上传到oss成功之后的资源地址.在html上引用的时候被旋转了90度oss资 ...
- 阿里云OSS上传图片,并使用图片服务裁切
<?php use OSS\OssClient; require_once './autoload.php'; // test $bucket = "在阿里云设置的bucket名字(这 ...
- 阿里云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 ...
- 使用阿里云OSS,上传图片时报错:java.lang.ClassNotFoundException:org.apache.http.ssl.TrustStrategy
问题产生的原因就是jar包版本问题,阿里的SDk引入的pom中依赖的httpclient和httpcore版本高于当前项目中已经设置的版本. 解决: 删除低版本后,更新下项目.
- PHP 上传文件至阿里云OSS对象存储
简述 1.阿里云开通对象存储服务 OSS 并创建Bucket 2.下载PHP SDK至框架扩展目录,点我下载 3.码上code 阿里云操作 开通对象存储服务 OSS 创建 Bucket 配置Acces ...
随机推荐
- 随手记Swift基础和Optional Type(问号?和感叹号!)
距离Apple推出Swift已经有几天了,网上也时不时出现"急招Swift程序猿,要求有一天工作经验"的帖子. 看到Swift,除了苹果放的另外一门语言的链接(http://swi ...
- 线程的几种状态转换<转>
线程在一定条件下,状态会发生变化.线程一共有以下几种状态: 1.新建状态(New):新创建了一个线程对象. 2.就绪状态(Runnable):线程对象创建后,其他线程调用了该对象的start()方法. ...
- iOS第三方支付集成
支付宝(alipay)和微信支付(Wechat Pay) 支付宝: 一.总体流程 (1)先与支付宝签约.获得商户ID(partner)和账号ID(seller)(注冊app⽤用) (2)下载对应的公钥 ...
- redis获取当前时间精确到微秒
在redis取得当前时的方法为执行time命令 127.0.0.1:6382> time1) "1495780564"2) "894089" 第一行为以 ...
- 【C】——线程引入 pthread_self 和 pthread_equal 原因 ——解决不同平台的问题!
1.引入pthread_equal的原因: 在线程中,线程ID的类型是pthread_t类型,由于在Linux下线程采用POSIX标准,所以,在不同的系统下,pthread_t的类型是不同的,比如在u ...
- CSS(三):引入样式和优先级
CSS的引入样式总共有三种:行内样式(内联样式表).内部样式表.外部样式表.下面分别来介绍这三种样式. 一.行内样式 行内样式也叫内联样式,使用style属性引入CSS样式.看下面的示例: <! ...
- Spring Boot 自定义属性 以及 乱码问题
自定义属性 使用随机数及自定义配置类 中文乱码问题 1添加配置 2设置文件类型 1IDEA 2eclipse 自定义属性 application.properties提供自定义属性的支持,这样我们就可 ...
- VS2008中设置字体大小和添加显示行号
1.字体设置 菜单->工具->选项->环境->字体和颜色 在字体那一栏可以选字体,VC6.0默认的字体是Fixedsys,字体大小你可以设为12,就与VC6.0的一样的字体了. ...
- java将doc文件转换为pdf文件的三种方法
http://feifei.im/archives/93 —————————————————————————————————————————————— 项目要用到doc转pdf的功能,一番google ...
- 日请求亿级的 QQ 会员 AMS 平台 PHP7 升级实践
QQ会员活动运营平台(AMS),是QQ会员增值运营业务的重要载体之一,承担海量活动运营的Web系统.AMS是一个主要采用PHP语言实现的活动运营平台, CGI日请求3亿左右,高峰期达到8亿.然而,在之 ...