电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術(shù)文章
文章詳情頁

vue+element+oss實現(xiàn)前端分片上傳和斷點續(xù)傳

瀏覽:5日期:2022-09-30 18:48:38

純前端實現(xiàn): 切片上傳 斷點續(xù)傳 。斷點續(xù)傳需要在切上上傳的基礎(chǔ)上實現(xiàn)

前端之前上傳OSS,無需后端提供接口。先上完整代碼,直接復(fù)制,將new OSS里的參數(shù)修改成自己公司OSS相關(guān)信息后可用,如遇問題,請繼續(xù)往下看。

oss官方文檔

https://help.aliyun.com/document_detail/111268.html?spm=a2c4g.11186623.6.1111.5a583a07LknRUO

代碼允許所需環(huán)境:vue + element + ali-oss

安裝ali-oss: cnpm install ali-oss

代碼實現(xiàn)

<template> <div class='dashboard-editor-container'> <el-upload action='' ref='upload' :file-list='fileList' :limit='2' :on-change='handleChange' :on-remove='handleRemove' :auto-upload='false' accept='' > <el-button slot='trigger' size='small' type='primary'>選取文件</el-button> <el-button size='small' type='success' @click='submitForm'>上傳到服務(wù)器</el-button> <el-button size='small' type='success' @click='resumeUpload'>繼續(xù)</el-button> <el-button size='small' type='success' @click='stopUplosd'>暫停</el-button> <el-button size='small' type='success' @click='abortMultipartUpload'>清除切片</el-button> </el-upload> <el-progress :percentage='percentage' :status='uploadStatus'></el-progress> </div></template><script> let OSS = require(’ali-oss’) // 引入ali-oss插件 const client = new OSS({ region: ’oss-cn-shanghai’,//根據(jù)那你的Bucket地點來填寫 accessKeyId: ’LTA*********RaXY’,//自己賬戶的accessKeyId accessKeySecret: ’uu1************GiS’,//自己賬戶的accessKeySecret bucket: ’a******o’,//bucket名字 });export default { data () { return { fileList:[], file: null, tempCheckpoint: null, // 用來緩存當前切片內(nèi)容 uploadId: ’’, uploadStatus: null, // 進度條上傳狀態(tài) percentage: 0, // 進度條百分比 uploadName: ’’, //Object所在Bucket的完整路徑 } }, mounted() { // window.addEventListener(’online’, this.resumeUpload); }, methods: { // 點擊上傳至服務(wù)器 submitForm(file) { this.multipartUpload(); }, // 取消分片上傳事件 async abortMultipartUpload() { window.removeEventListener(’online’, this.resumeUpload) const name = this.uploadName; // Object所在Bucket的完整路徑。 const uploadId = this.upload; // 分片上傳uploadId。 const result = await client.abortMultipartUpload(name, uploadId); console.log(result, ’=======清除切片====’); }, // 暫停分片上傳。 stopUplosd () { window.removeEventListener(’online’, this.resumeUpload) // 暫停時清除時間監(jiān)聽 let result = client.cancel(); console.log( result, ’---------暫停上傳-----------’) }, // 切片上傳 async multipartUpload () { if (!this.file) { this.$message.error(’請選擇文件’) return } this.uploadStatus = null // console.log('this.uploadStatus',this.file, this.uploadStatus); this.percentage = 0 try { //object-name可以自定義為文件名(例如file.txt)或目錄(例如abc/test/file.txt)的形式,實現(xiàn)將文件上傳至當前Bucket或Bucket下的指定目錄。 let result = await client.multipartUpload(this.file.name, this.file, { headers: { ’Content-Disposition’: ’inline’, ’Content-Type’: this.file.type //注意:根據(jù)圖片或者文件的后綴來設(shè)置,我試驗用的‘.png’的圖片,具體為什么下文解釋 }, progress: (p, checkpoint) => { this.tempCheckpoint = checkpoint; this.upload = checkpoint.uploadId this.uploadName = checkpoint.name this.percentage = p * 100 // console.log(p, checkpoint, this.percentage, ’---------uploadId-----------’) // 斷點記錄點。瀏覽器重啟后無法直接繼續(xù)上傳,您需要手動觸發(fā)上傳操作。 }, meta: { year: 2020, people: ’dev’ }, mime: this.file.type }); console.log(result, this.percentage, ’result= 切片上傳完畢=’); } catch (e) { window.addEventListener(’online’, this.resumeUpload) // 該監(jiān)聽放在斷網(wǎng)的異常處理 // 捕獲超時異常。 if (e.code === ’ConnectionTimeoutError’) { // 請求超時異常處理 this.uploadStatus = ’exception’ console.log('TimeoutError'); // do ConnectionTimeoutError operation } // console.log(e) } }, // 恢復(fù)上傳。 async resumeUpload () { window.removeEventListener(’online’, this.resumeUpload) if (!this.tempCheckpoint) { this.$message.error(’請先上傳’) return } this.uploadStatus = null try { let result = await client.multipartUpload(this.file.name, this.file, { headers: { ’Content-Disposition’: ’inline’, ’Content-Type’: this.file.type //注意:根據(jù)圖片或者文件的后綴來設(shè)置,我試驗用的‘.png’的圖片,具體為什么下文解釋 }, progress: (p, checkpoint) => { this.percentage = p * 100 console.log(p, checkpoint, ’checkpoint----恢復(fù)上傳的切片信息-------’) this.tempCheckpoint = checkpoint; }, checkpoint: this.tempCheckpoint, meta: { year: 2020, people: ’dev’ }, mime: this.file.type }) console.log(result, ’result-=-=-恢復(fù)上傳完畢’) } catch (e) { console.log(e, ’e-=-=-’); } }, // 選擇文件發(fā)生改變 handleChange(file, fileList) { this.fileList = fileList.filter(row => row.uid == file.uid) this.file = file.raw // 文件改變時上傳 // this.submitForm(file) }, handleRemove(file, fileList) { this.percentage = 0 //進度條置空 this.fileList = [] }, }}</script><style scoped></style>

如果相關(guān)依賴已經(jīng)安裝完畢,但是上述代碼操作時仍有報錯,請檢查以下問題

const client = new OSS({ region: ’oss-cn-shanghai’,//根據(jù)那你的Bucket地點來填寫 accessKeyId: ’LT******XY’,//自己賬戶的accessKeyId accessKeySecret: ’uu*********GiS’,//自己賬戶的accessKeySecret bucket: ’a******io’,//bucket名字 });

上述信息放在前端會存在安全問題,如在項目中使用盡量由后端接口提供?;蚴褂肧TS臨時授權(quán)。demo中沒有,請自行探索。https://www.alibabacloud.com/help/zh/doc-detail/100624.htm?spm=a2c63.p38356.879954.5.7a234d04IQpf5I#concept-xzh-nzk-2gb

配置項中信息可以問后端或者運維,bucket的名字必須是你OSS上存在的且你有權(quán)限訪問的,不然會一直報 Pleasr create a busket first或者一直報跨域

當遇到跨域時,或者遇到報報錯信息中有etag時,請檢查OSS配置,然后找有OSS服務(wù)器權(quán)限人員進行配置:

vue+element+oss實現(xiàn)前端分片上傳和斷點續(xù)傳

window.addEventListener(’online’, this.resumeUpload)用于監(jiān)聽網(wǎng)絡(luò)狀態(tài)(斷網(wǎng)狀態(tài)和連網(wǎng)狀態(tài)),實現(xiàn)斷網(wǎng)后恢復(fù)網(wǎng)絡(luò)自動上傳就必須設(shè)置監(jiān)聽。

window.removeEventListener(’online’, this.resumeUpload)取消監(jiān)聽。如果不設(shè)置取消監(jiān)聽,聯(lián)網(wǎng)狀態(tài)下會一直處于進行上傳,因為一直滿足監(jiān)聽條件`

headers: { ’Content-Disposition’: ’inline’, ’Content-Type’: this.file.type //注意:根據(jù)圖片或者文件的后綴來設(shè)置,我取得是文件的type,具體為什么下文解釋 },

’Content-Type’: this.file.type`的作用:加了在文件上傳完畢后,訪問文件鏈接時可以直接查看,否則會直接下載。

文件上傳完畢后查看,可以去resule.res.requestUrls中去取,但是注意要去點地址后面的 ?uploadId=******

上述代碼只是demo,代碼以實現(xiàn)功能為主,并不嚴謹,請自行完善。

到此這篇關(guān)于vue+element+oss實現(xiàn)前端分片上傳和斷點續(xù)傳的文章就介紹到這了,更多相關(guān)vue 分片上傳和斷點續(xù)傳內(nèi)容請搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!

標簽: Vue
相關(guān)文章:
主站蜘蛛池模板: Magnescale探规,Magnescale磁栅尺,Magnescale传感器,Magnescale测厚仪,Mitutoyo光栅尺,笔式位移传感器-苏州连达精密量仪有限公司 | 耐高温风管_耐高温软管_食品级软管_吸尘管_钢丝软管_卫生级软管_塑料波纹管-东莞市鑫翔宇软管有限公司 | 涡轮流量计_LWGY智能气体液体电池供电计量表-金湖凯铭仪表有限公司 | 啤酒设备-小型啤酒设备-啤酒厂设备-济南中酿机械设备有限公司 | 连续油炸机,全自动油炸机,花生米油炸机-烟台茂源食品机械制造有限公司 | 南京兰江泵业有限公司-水解酸化池潜水搅拌机-絮凝反应池搅拌机-好氧区潜水推进器 | 福州时代广告制作装饰有限公司-福州广告公司广告牌制作,福州展厅文化墙广告设计, | 中空玻璃生产线,玻璃加工设备,全自动封胶线,铝条折弯机,双组份打胶机,丁基胶/卧式/立式全自动涂布机,玻璃设备-山东昌盛数控设备有限公司 | EPDM密封胶条-EPDM密封垫片-EPDM生产厂家 | 青岛空压机,青岛空压机维修/保养,青岛空压机销售/出租公司,青岛空压机厂家电话 | 天津热油泵_管道泵_天津高温热油泵-天津市金丰泰机械泵业有限公司【官方网站】 | 外贮压-柜式-悬挂式-七氟丙烷-灭火器-灭火系统-药剂-价格-厂家-IG541-混合气体-贮压-非贮压-超细干粉-自动-灭火装置-气体灭火设备-探火管灭火厂家-东莞汇建消防科技有限公司 | 模具钢_高速钢_不锈钢-万利钢金属材料 | 浴室柜-浴室镜厂家-YINAISI · 意大利设计师品牌 | 咿耐斯 |-浙江台州市丰源卫浴有限公司 | 语料库-提供经典范文,文案句子,常用文书,您的写作得力助手 | 重庆波纹管|重庆钢带管|重庆塑钢管|重庆联进管道有限公司 | 智能门锁电机_智能门锁离合器_智能门锁电机厂家-温州劲力智能科技有限公司 | T恤衫定做,企业文化衫制作订做,广告T恤POLO衫定制厂家[源头工厂]-【汉诚T恤定制网】 | 爆破器材运输车|烟花爆竹运输车|1-9类危险品厢式运输车|湖北江南专用特种汽车有限公司 | nalgene洗瓶,nalgene量筒,nalgene窄口瓶,nalgene放水口大瓶,浙江省nalgene代理-杭州雷琪实验器材有限公司 | OpenI 启智 新一代人工智能开源开放平台 | PCB厂|线路板厂|深圳线路板厂|软硬结合板厂|电路板生产厂家|线路板|深圳电路板厂家|铝基板厂家|深联电路-专业生产PCB研发制造 | 广东成考网-广东成人高考网 | 除甲醛公司-甲醛检测-广西雅居环境科技有限公司 | 【中联邦】增稠剂_增稠粉_水性增稠剂_涂料增稠剂_工业增稠剂生产厂家 | 耐腐蚀泵,耐腐蚀真空泵,玻璃钢真空泵-淄博华舜耐腐蚀真空泵有限公司 | 智能气瓶柜(大型气瓶储存柜)百科 | 传动滚筒_厂家-淄博海恒机械制造厂| 体视显微镜_荧光生物显微镜_显微镜报价-微仪光电生命科学显微镜有限公司 | 智成电子深圳tdk一级代理-提供TDK电容电感贴片蜂鸣器磁芯lambda电源代理经销,TDK代理商有哪些TDK一级代理商排名查询。-深圳tdk一级代理 | 蜜蜂职场文库_职场求职面试实用的范文资料大全 | SDG吸附剂,SDG酸气吸附剂,干式酸性气体吸收剂生产厂家,超过20年生产使用经验。 - 富莱尔环保设备公司(原名天津市武清县环保设备厂) | 美侍宠物-专注宠物狗及宠物猫训练|喂养|医疗|繁育|品种|价格 | 搪玻璃冷凝器_厂家-越宏化工设备| 二手色谱仪器,十万分之一分析天平,蒸发光检测器,电位滴定仪-湖北捷岛科学仪器有限公司 | 水稻烘干机,小麦烘干机,大豆烘干机,玉米烘干机,粮食烘干机_巩义市锦华粮食烘干机械制造有限公司 水环真空泵厂家,2bv真空泵,2be真空泵-淄博真空设备厂 | 工业车间焊接-整体|集中除尘设备-激光|等离子切割机配套除尘-粉尘烟尘净化治理厂家-山东美蓝环保科技有限公司 | 东莞螺杆空压机_永磁变频空压机_节能空压机_空压机工厂批发_深圳螺杆空压机_广州螺杆空压机_东莞空压机_空压机批发_东莞空压机工厂批发_东莞市文颖设备科技有限公司 | 煤棒机_增碳剂颗粒机_活性炭颗粒机_木炭粉成型机-巩义市老城振华机械厂 | 硫化罐-胶管硫化罐-山东鑫泰鑫智能装备有限公司 | 蓝牙音频分析仪-多功能-四通道-八通道音频分析仪-东莞市奥普新音频技术有限公司 |