訪問 OSS 有兩種方式,本文用到的是使用臨時訪問憑證上傳到 OSS,不同語言版本的代碼參考:
使用STS臨時訪問憑證訪問OSS_對象存儲(OSS)-阿里云幫助中心
1.安裝并使用
首先我們要安裝 OSS:
npm install ali-oss --save
接著我們創建一個 oss.js 文件,編寫如下代碼:
const axios = require("axios");
const OSS = require("ali-oss");export let client = null
export let object_name = ''export const getToken = async (ext) => {const formData = {ext: ext,csrf_token: window.sessionStorage.getItem('csrf-token'),}const res = await axios.post('your-path', formData)const token = res.data.dataclient = new OSS({region: token.region,accessKeyId: token.AccessKeyId,accessKeySecret: token.AccessKeySecret,stsToken: token.SecurityToken,authorizationV4: true,bucket: token.bucket,})object_name = token.object_name
}
后端接口返回的參數結構如圖:
接下來即可使用 OSS 的?client.multipartUpload 進行分片上傳:
const uploadArt = () => {const inputFile = document.createElement('input');inputFile.type = 'file';inputFile.accept = 'video/*'inputFile.multiple = false // 是否可以批量上傳inputFile.addEventListener('change', async (event) => {const files = event.target.files;if (!files || files.length === 0) returnif (art_type.value === 'video') {const file = files[0]if (!file.name.endsWith('.mp4') && !file.name.endsWith('.mov')) {Modal.message({status: 'error',message: '請上傳.mov或.mp4格式的視頻!',duration: 3000})return}if (file.size > 300 * 1024 * 1024) {Modal.message({status: 'error',message: '視頻不能大于300MB!',duration: 3000})return}const ext = file.name.split('.').pop()await getToken(ext)const res = await client.multipartUpload(object_name, file)if(res) {videoUrl.value = {url: window.sessionStorage.getItem("video_url"),object_name: window.sessionStorage.getItem("video_object_name")}const url = stripQueryParams(res.res.requestUrls[0])await autoUploadPoster(`${url}?x-oss-process=video/snapshot,t_0,f_jpg`) // 獲取封面圖并上傳}}});inputFile.click();
}
上傳之后拿到的視頻 url 可以調用如下方法獲取視頻第一幀作為視頻封面:
`${url}?x-oss-process=video/snapshot,t_0,f_jpg`
分片效果如圖:?
上述代碼是每次上傳一個視頻,如果想批量上傳,可設置:
inputFile.multiple = true // 是否可以批量上傳
并視頻 for 循環遍歷各個文件進行上傳。可查看文檔,參考上傳的回調,獲取上傳進度等,本文主要講述 OSS 封裝的操作,視頻上傳僅為使用實例。