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 ...
随机推荐
- 基于jQuery点击缩略图右侧滑出大图特效
基于jQuery点击缩略图右侧滑出大图特效是一款基于strip.pkgd插件实现的点击左侧缩略图右侧滑出大图切换代码.效果图如下: 在线预览 源码下载 实现的代码. html代码: <div ...
- linux下mysql重置密码并且远程可以访问
.重置mysql密码: 杀死所有的yum myql进程: pkill mysql; 查看端口 netstat 端口号杀死) 修改my.cnf文件,在[mysqld]下加入skip-grant-tabl ...
- 【Android】按钮点击事件的常用写法
学习总结: 最近学习了Android点击事件的常用写法.点击事件会触发监听对象身上的回调,常用写法有以下四种: 方法一:使用匿名内部类. public class MainActivity exten ...
- C# switch-case中的或(or)操作
今天需要在switch中添加一个条件,类似if中的 " || “操作 switch(var) { : : ... break; : : ... break; ... } 这样条件2 5会执行 ...
- C语言 · 递归求二项式系数值
算法训练 6-1 递归求二项式系数值 时间限制:10.0s 内存限制:256.0MB 问题描述 样例输入 一个满足题目要求的输入范例.3 10 样例输出 与上面的样例输入对应的输出. ...
- RPC框架与分布式服务框架的区别
第一:RPC框架是点对点的通信方式,即服务消费者与服务提供者是点对点通信 第二:分布式服务框架,不近具有RPC框架的特性,同时,还包括以下特性: 1.提供多台服务器提供服务,具有负载均衡策略 2.服务 ...
- 基于机器学习人脸识别face recognition具体的算法和原理
引自:http://blog.csdn.net/eclipsesy/article/details/78388468?utm_source=debugrun&utm_medium=referr ...
- 使用jquery将表单元素转json提交后台
今天帮朋友解决一个问题,朋友的框架用的layui的,发现layui的里面的data.field不能获取动态生成的标签的值的. 于是使用jquery的方法如下: var formObject = {}; ...
- strace用法说明
strace命令详解strace 命令是一种强大的工具,它能够显示所有由用户空间程序发出的系统调用. strace 显示这些调用的参数并返回符号形式的值.strace 从内核接收信息,而且不需要以任何 ...
- Freemarker操作字符串
1.substring(start,end)从一个字符串中截取子串start:截取子串开始的索引,start必须大于等于0,小于等于endend: 截取子串的长度,end必须大于等于0,小于等于字符串 ...