前言
在前端开发中文件上传是经常会遇到的,并且多数情况会使用第三方平台来存储文件,腾讯云cos是我们常用的。本篇文章就是带我从前端的角度实现腾讯云COS存储。本文参考了腾讯云COS开发文档 JavaScript SDK
步骤
安装腾讯云COS上传所需的sdk
下载cos-js-sdk-v5.min.js并引入index.html
监听文件上传组件
//监听文件变化
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 上传的文件流及文件类型 名称相关信息
* @param {Array} 允许上传的文件类型
* @param {function} uploadStatusCallbalck
* @return {function} 返回回调函数
*/
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 ".")).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: '获取文件秘钥接口出错!'});
});
}
上传文件(调用相关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});
}
);
}
总结
腾讯云cos文件上传实际是分为三步,本地表单处理文件流 => 根据文档获取相关参数 => 上传文件。
- 第一步主要前端上传功能的处理,可以用来限制文件上传大小(不太准确,根据文件的字节流长度),文件上传类型(根据文件后缀名)。
- 第二步的参数多数都是可以在cos账号后台拿到的。这块参数最好还是存储在后台比较安全。
- 第三步上传我们只需要调用sdk相关接口传入参数即可。只要熟悉了这三个步骤,上传的大部分问题都能解决掉。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
《魔兽世界》大逃杀!60人新游玩模式《强袭风暴》3月21日上线
暴雪近日发布了《魔兽世界》10.2.6 更新内容,新游玩模式《强袭风暴》即将于3月21 日在亚服上线,届时玩家将前往阿拉希高地展开一场 60 人大逃杀对战。
艾泽拉斯的冒险者已经征服了艾泽拉斯的大地及遥远的彼岸。他们在对抗世界上最致命的敌人时展现出过人的手腕,并且成功阻止终结宇宙等级的威胁。当他们在为即将于《魔兽世界》资料片《地心之战》中来袭的萨拉塔斯势力做战斗准备时,他们还需要在熟悉的阿拉希高地面对一个全新的敌人──那就是彼此。在《巨龙崛起》10.2.6 更新的《强袭风暴》中,玩家将会进入一个全新的海盗主题大逃杀式限时活动,其中包含极高的风险和史诗级的奖励。
《强袭风暴》不是普通的战场,作为一个独立于主游戏之外的活动,玩家可以用大逃杀的风格来体验《魔兽世界》,不分职业、不分装备(除了你在赛局中捡到的),光是技巧和战略的强弱之分就能决定出谁才是能坚持到最后的赢家。本次活动将会开放单人和双人模式,玩家在加入海盗主题的预赛大厅区域前,可以从强袭风暴角色画面新增好友。游玩游戏将可以累计名望轨迹,《巨龙崛起》和《魔兽世界:巫妖王之怒 经典版》的玩家都可以获得奖励。
更新日志
- 小骆驼-《草原狼2(蓝光CD)》[原抓WAV+CUE]
- 群星《欢迎来到我身边 电影原声专辑》[320K/MP3][105.02MB]
- 群星《欢迎来到我身边 电影原声专辑》[FLAC/分轨][480.9MB]
- 雷婷《梦里蓝天HQⅡ》 2023头版限量编号低速原抓[WAV+CUE][463M]
- 群星《2024好听新歌42》AI调整音效【WAV分轨】
- 王思雨-《思念陪着鸿雁飞》WAV
- 王思雨《喜马拉雅HQ》头版限量编号[WAV+CUE]
- 李健《无时无刻》[WAV+CUE][590M]
- 陈奕迅《酝酿》[WAV分轨][502M]
- 卓依婷《化蝶》2CD[WAV+CUE][1.1G]
- 群星《吉他王(黑胶CD)》[WAV+CUE]
- 齐秦《穿乐(穿越)》[WAV+CUE]
- 发烧珍品《数位CD音响测试-动向效果(九)》【WAV+CUE】
- 邝美云《邝美云精装歌集》[DSF][1.6G]
- 吕方《爱一回伤一回》[WAV+CUE][454M]