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 ...
随机推荐
- 猥琐百度杯猥琐CTF
其实不难,但是作为我这个代码菜鸡+脑洞菜鸡+黑阔菜鸡而言确实挺难. 题目源码: <?php error_reporting(0); session_start(); require('./fla ...
- Java8中list转map
第一种: 取list中某2个字段作为Map的K,V public Map<Long, String> getIdNameMap(List<Account> accounts) ...
- android开发(27) 看看我的手机里都有什么传感器
想看看我的HTC ONE x 具有什么传感器.写个代码RUN一下. 代码很简单,直接贴了 package zyf.demo.sensordemo; import java.util.List; imp ...
- avcodec_open2()分析
该函数用于初始化一个视音频编解码器的AVCodecContext. int avcodec_open2(AVCodecContext *avctx, const AVCodec *codec, AVD ...
- Materialize快速入门教程
https://materializecss.com/ https://github.com/Dogfalo/materialize http://www.materializecss.cn/ 1,下 ...
- ggplot2 subscript in x-axis labels(ticks, legend)
#==============================# ggplot2: subscript in x-axis labels(ticks) rm(list=ls(all=TRUE))lib ...
- 你应该知道的CSS2.0中最常用的18条技巧
一.使用css缩写 使用缩写可以帮助减少你CSS文件的大小,更加容易阅读. 具体内容请浏览:CSS常用缩写语法 二.明确定义单位,除非值为0. 忘记定义尺寸的单位是CSS新手普遍的错误.在HTML中 ...
- 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 ...
- 《FPGA全程进阶---实战演练》第十章 数码管实验
1基础理论部分 led数码管是由多个发光二极管封装在一起组合的“8”字型的器件,引线内部已经完成,如下图10.1所示,图10.2为实物图. 图10.1 数码管内部结构 那么我们想要控制数码管的亮灭,其 ...
- C语言简明数据类型指南
一.常用的数据类型 char:字符在计算机的存储器中以字符编码的形式保存,字符编码是一个数字,因此在计算机看来,A与数字65完全一样(65是A的ASCII码). int:如果要保存一个整数,通常可以使 ...