oss使用分片直傳大文件

首先要先安裝oss插件

npm install ali-oss

然後倒入oss插件,可以全局也可局部,我用的是局部

import OSS from 'ali-oss'

在用oss直傳大文件的時候會出現瀏覽器崩潰的情況,針對這種情況,可使用分片上傳

分片上傳時,可能會出現以下情況

若出現上述情況,需要在oss中 要在跨域設置裏面的暴露 Headers增加一條ETag,然後就可以正常上傳了

 

uploadOssFile (data) {

var urlStr = this.upLoadAvatarOss(data)

console.log(this.ossData, urlStr)

},

async upLoadAvatarOss (e) {

const _this = this

_this.tableLoading = true

var file = e.file

var reader = new FileReader()

reader.readAsArrayBuffer(file)

return new Promise((resolve, reject) => {

reader.onload = function (event) {

const client = new OSS({

region: _this.ossData.region,

accessKeyId: _this.ossData.key,

accessKeySecret: _this.ossData.secret,

bucket: _this.ossData.bucket

})

let d = new Date()

let dArr = d.toLocaleDateString().split('/')

for (let index = 0; index < dArr.length; index++) {

if (index > 0 && dArr[index].length < 2) {

dArr[index] = '0' + dArr[index]

}

}

const obj = new Date().getTime() // 時間戳

const key = 'oss/' + 'project_' + _this.ossData.project_id + '/common/' + dArr.join('') + '/' + d.getTime() + '_' + file.name.split('.').join(obj + '.')

async function multipartUpload () {

_this.tableLoading = true

try {

let result = await client.multipartUpload(key, file, {

progress: function (percentage) {

console.log(percentage)

let fileloadingNum = Math.ceil(percentage * 100) + '%'

_this.tableText = '已上傳' + fileloadingNum

},

meta: {

year: 2019,

people: 'multipartUpload'

}

})

console.log(result)

let head = await client.head(key)

console.log(head)

let data = {}

data.uploadFile = '/' + result.name

data.fileSize = file.size

data.suffix = file.name.substr(file.name.lastIndexOf('.') + 1, file.name.length)

data.project_id = _this.ossData.project_id

data.id = _this.getCurrentId()

data.name = file.name

_this.addFileAjax(data)

if (result.res.statusCode === 200) {

e.onSuccess(result)

return result

} else {

e.onError('上傳失敗')

}

} catch (e) {

// 捕獲超時異常

if (e.code === 'ConnectionTimeoutError') {

console.log('Woops,超時啦!')

// do ConnectionTimeoutError operation

}

console.log(e)

}

}

return multipartUpload()

}

})

}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章