欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

js純前端實現(xiàn)騰訊cos文件上傳功能的示例代碼

 更新時間:2019年05月14日 15:07:33   作者:暴走的snail  
這篇文章主要介紹了vue純前端實現(xiàn)騰訊cos文件上傳功能的示例代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

前言

在前端開發(fā)中文件上傳是經(jīng)常會遇到的,并且多數(shù)情況會使用第三方平臺來存儲文件,騰訊云cos是我們常用的。本篇文章就是帶我從前端的角度實現(xiàn)騰訊云COS存儲。本文參考了騰訊云COS開發(fā)文檔 JavaScript SDK

步驟

安裝騰訊云COS上傳所需的sdk

下載cos-js-sdk-v5.min.js并引入index.html

監(jiān)聽文件上傳組件

//監(jiān)聽文件變化
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)
            }
          })
        }

初始化文件上傳對象(封裝起來其他地方上傳也可以用)

/**
 * 初始化上傳文件對象
 * @param {object} Vue
 * @param {string} fileName 文件名
 * @param {object} file 上傳的文件流及文件類型 名稱相關(guān)信息
 * @param {Array} 允許上傳的文件類型
 * @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',
 };
 //前端做文件類型限制
 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: '請上傳正確的'+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);
};

獲取文件上傳密鑰(最好存在后端通過ajax請求獲取,安全性較高)

function getFileToken (Vue, fileInfo, cos, file, uploadStatusCallbalck) {
 let url = process.env.VUE_APP_URL + '/file/secretid';
 if (!file) return;
 // 異步獲取臨時密鑰
 axios
  .get (url)
  .then (function (res) {
   if (res.data.code == 100000) {
    //獲取的臨時秘鑰存儲在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: '獲取文件秘鑰接口出錯!'});
  });
}

上傳文件(調(diào)用相關(guān)api putObject來上傳文件)

/**
 * @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 ('校驗中', 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文件上傳實際是分為三步,本地表單處理文件流 => 根據(jù)文檔獲取相關(guān)參數(shù) => 上傳文件。

  • 第一步主要前端上傳功能的處理,可以用來限制文件上傳大小(不太準(zhǔn)確,根據(jù)文件的字節(jié)流長度),文件上傳類型(根據(jù)文件后綴名)。
  • 第二步的參數(shù)多數(shù)都是可以在cos賬號后臺拿到的。這塊參數(shù)最好還是存儲在后臺比較安全。
  • 第三步上傳我們只需要調(diào)用sdk相關(guān)接口傳入?yún)?shù)即可。只要熟悉了這三個步驟,上傳的大部分問題都能解決掉。

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Bootstrap每天必學(xué)之滾動監(jiān)聽

    Bootstrap每天必學(xué)之滾動監(jiān)聽

    Bootstrap每天必學(xué)之滾動監(jiān)聽,對Bootstrap滾動監(jiān)聽感興趣的小伙伴們可以參考一下
    2016-03-03
  • JavaScript實現(xiàn)圖片縮放功能

    JavaScript實現(xiàn)圖片縮放功能

    本文,我們來講講如何使用 JavaScript 實現(xiàn)圖片的縮放,當(dāng)然,我們可以類比到其他的元素,比如視頻的縮放,文中有詳細(xì)的代碼示例,對大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下
    2024-07-07
  • JavaScript實現(xiàn)點贊功能的示例

    JavaScript實現(xiàn)點贊功能的示例

    本文主要介紹了JavaScript實現(xiàn)點贊功能的示例,分享給大家
    2014-04-04
  • ES6中Object.assign方法使用詳解

    ES6中Object.assign方法使用詳解

    這篇文章主要給大家介紹了關(guān)于ES6中Object.assign方法使用的相關(guān)資料,Object.assign可以用來處理數(shù)組,但是會把數(shù)組視為對象,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-06-06
  • js仿小米二級菜單顯示效果

    js仿小米二級菜單顯示效果

    這篇文章主要為大家詳細(xì)介紹了js仿小米二級菜單顯示效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • JavaScript?ECharts可視化圖表庫

    JavaScript?ECharts可視化圖表庫

    這篇文章主要介紹了JavaScript?ECharts可視化圖表庫,ECharts是一款基于JavaScript的數(shù)據(jù)可視化圖表庫,提供直觀,生動,可交互,可個性化定制的數(shù)據(jù)可視化圖表
    2023-01-01
  • 使用JavaScript和MQTT開發(fā)物聯(lián)網(wǎng)應(yīng)用示例解析

    使用JavaScript和MQTT開發(fā)物聯(lián)網(wǎng)應(yīng)用示例解析

    這篇文章主要介紹了使用JavaScript和MQTT開發(fā)物聯(lián)網(wǎng)應(yīng)用示例解析,文章通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-08-08
  • 快速理解 JavaScript 中的 LHS 和 RHS 查詢的用法

    快速理解 JavaScript 中的 LHS 和 RHS 查詢的用法

    本篇文章主要介紹了快速理解 JavaScript 中的 LHS 和 RHS 查詢的用法,有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-08-08
  • JavaScript實現(xiàn)旋轉(zhuǎn)輪播圖

    JavaScript實現(xiàn)旋轉(zhuǎn)輪播圖

    這篇文章主要為大家詳細(xì)介紹了JavaScript實現(xiàn)旋轉(zhuǎn)輪播圖,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-08-08
  • JavaScript中的console.log()函數(shù)詳細(xì)介紹

    JavaScript中的console.log()函數(shù)詳細(xì)介紹

    這篇文章主要介紹了JavaScript中的console.log()函數(shù)詳細(xì)介紹,本文講解了什么是console.log()、兼容沒有調(diào)試控制臺的瀏覽器、使用參數(shù)、使用其它日志級別等內(nèi)容,需要的朋友可以參考下
    2014-12-12

最新評論