前言
在前端开发中文件上传是经常会遇到的,并且多数情况会使用第三方平台来存储文件,腾讯云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 ? 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: '获取文件秘钥接口出错!'}); }); }
上传文件(调用相关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文件上传实际是分为三步,本地表单处理文件流 => 根据文档获取相关参数 => 上传文件。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持小牛知识库。
本文向大家介绍PHP实现文件上传功能实例代码,包括了PHP实现文件上传功能实例代码的使用技巧和注意事项,需要的朋友参考一下 点击浏览,将所选的文件上传到创建的images文件夹内 代码如下: 1.wenjian.php 2.chuli.php 以上所述是小编给大家介绍的PHP实现文件上传功能实例代码,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对呐喊教
本文向大家介绍jquery ajax实现文件上传功能实例代码,包括了jquery ajax实现文件上传功能实例代码的使用技巧和注意事项,需要的朋友参考一下 下面看下ajax实现文件上传 没有使用插件 一、单文件上传 二、多文件上传 这个是多选上传,关键是multiple="multiple"这个属性,另外使用的接口也是多文件上传的接口。 当然也可以使用单文件上传的模式,多次选择就可以了,只
本文向大家介绍纯js实现无缝滚动功能代码实例,包括了纯js实现无缝滚动功能代码实例的使用技巧和注意事项,需要的朋友参考一下 这篇文章主要介绍了纯js实现无缝滚动功能代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 HTML代码 CSS代码 JS代码 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持呐喊教程。
本文向大家介绍c# 实现文件上传下载功能的实例代码,包括了c# 实现文件上传下载功能的实例代码的使用技巧和注意事项,需要的朋友参考一下 NuGet 安装SqlSugar 1.Model文件下新建 DbContext 类 2.建uploading实体类 3.Manager文件下建UploadingManager 窗体加载Form1_Load 1.读取到数据库字段name并赋值 2.comboBox事
本文向大家介绍简单实现js上传文件功能,包括了简单实现js上传文件功能的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了js实现上传文件功能的具体代码,供大家参考,具体内容如下 一、用input完成上传,效果图如 选择文件后,提交后出现图片url 二、传输格式采用form-data形式。 html代码 js部分 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大
本文向大家介绍C#实现文件上传及文件下载功能实例代码,包括了C#实现文件上传及文件下载功能实例代码的使用技巧和注意事项,需要的朋友参考一下 废话不多说了,直接给大家贴代码了,具体代码如下所示: 总结 以上所述是小编给大家介绍的C#实现文件上传及文件下载功能实例代码,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对呐喊教程网站的支持!