您好,登錄后才能下訂單哦!
這篇文章主要介紹了js如何實(shí)現(xiàn)騰訊cos文件上傳功能,具有一定借鑒價(jià)值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。
步驟
安裝騰訊云COS上傳所需的sdk
下載cos-js-sdk-v5.min.js并引入index.html
監(jiān)聽(tīng)文件上傳組件
//監(jiān)聽(tīng)文件變化 document.getElementById('file').onchange = function() { let file = this.files[0]; let type = file.type //初始化文件上傳 initUploadObj(that, file.name, file, 'image', function(res) { if (res.success) { that.$message.success(res.msg) } else { that.$message.warning(res.msg) } }) }
初始化文件上傳對(duì)象(封裝起來(lái)其他地方上傳也可以用)
/** * 初始化上傳文件對(duì)象 * @param {object} Vue * @param {string} fileName 文件名 * @param {object} file 上傳的文件流及文件類(lèi)型 名稱(chēng)相關(guān)信息 * @param {Array} 允許上傳的文件類(lèi)型 * @param {function} uploadStatusCallbalck * @return {function} 返回回調(diào)函數(shù) */ export const initUploadObj = function (Vue,fileName,file,type,uploadStatusCallbalck) { let fileInfo = { file_name: fileName, media_type: 2, media_sub_type: 0, size_of_bytes: 122, file_expired_type: 'permanent', }; //前端做文件類(lèi)型限制 if(type == 'image'){ type = ['.jpg','.gif','.jpeg','.bmp','.png'] } if(type == 'excel'){ type = ['.xlsx'] } let fileType =file.name ? file.name.substring(file.name.lastIndexOf(".")).toLowerCase() : ''; if (!!type && type.indexOf (fileType) < 0) { uploadStatusCallbalck ({success: false, msg: '請(qǐng)上傳正確的'+type+'文件格式!'}); return; } var cos = new COS ({ getAuthorization: function (options, callback) { let singleInfo = Vue.$store.state.fileToken; callback ({ TmpSecretId: singleInfo.tmpSecretId, TmpSecretKey: singleInfo.tmpSecretKey, XCosSecurityToken: singleInfo.sessionToken, ExpiredTime: singleInfo.expiredTime, }); }, }); fileInfo.file_name = file.name; //獲取文件上傳密鑰 getFileToken (Vue, fileInfo, cos, file, uploadStatusCallbalck); };
獲取文件上傳密鑰(最好存在后端通過(guò)ajax請(qǐng)求獲取,安全性較高)
function getFileToken (Vue, fileInfo, cos, file, uploadStatusCallbalck) { let url = process.env.VUE_APP_URL + '/file/secretid'; if (!file) return; // 異步獲取臨時(shí)密鑰 axios .get (url) .then (function (res) { if (res.data.code == 100000) { //獲取的臨時(shí)秘鑰存儲(chǔ)在vuex中 Vue.$store.commit ('UPDATE_FILE_INFO', res.data.data); uploadFile (cos, file, res.data.data, uploadStatusCallbalck); } else { uploadStatusCallbalck ({success: false, msg: '獲取文件秘鑰失敗!'}); } }) .catch (function (err) { uploadStatusCallbalck ({success: false, msg: '獲取文件秘鑰接口出錯(cuò)!'}); }); }
上傳文件(調(diào)用相關(guān)api putObject來(lái)上傳文件)
/** * @method uploadFile * @param {object} cos */ function uploadFile (cos, file, signInfo, callback) { cos.putObject ( { Bucket: process.env.VUE_APP_BUCKET, Region: 'ap-shanghai', Key: signInfo.fileId, Body: file, onHashProgress: function (progressData) { console.log ('校驗(yàn)中', JSON.stringify (progressData)); }, onProgress: function (progressData) { console.log ('上傳中', JSON.stringify (progressData)); }, }, function (err, data) { if (err) { console.log (err); callback ({success: false, msg: '文件上傳失敗!'}); return; } callback ({success: true, msg: '上傳成功!', data: data, signInfo: signInfo}); } ); }
總結(jié)
騰訊云cos文件上傳實(shí)際是分為三步,本地表單處理文件流 => 根據(jù)文檔獲取相關(guān)參數(shù) => 上傳文件。
第一步主要前端上傳功能的處理,可以用來(lái)限制文件上傳大?。ú惶珳?zhǔn)確,根據(jù)文件的字節(jié)流長(zhǎng)度),文件上傳類(lèi)型(根據(jù)文件后綴名)。
第二步的參數(shù)多數(shù)都是可以在cos賬號(hào)后臺(tái)拿到的。這塊參數(shù)最好還是存儲(chǔ)在后臺(tái)比較安全。
第三步上傳我們只需要調(diào)用sdk相關(guān)接口傳入?yún)?shù)即可。只要熟悉了這三個(gè)步驟,上傳的大部分問(wèn)題都能解決掉。
感謝你能夠認(rèn)真閱讀完這篇文章,希望小編分享的“js如何實(shí)現(xiàn)騰訊cos文件上傳功能”這篇文章對(duì)大家有幫助,同時(shí)也希望大家多多支持億速云,關(guān)注億速云行業(yè)資訊頻道,更多相關(guān)知識(shí)等著你來(lái)學(xué)習(xí)!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。