cos.js 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. import COS from 'cos-js-sdk-v5';
  2. import { Message } from 'element-ui';
  3. import { getTmpSecretKey } from '@/api/common';
  4. const config = {
  5. Bucket: process.env.VUE_APP_COS_BUCKET,
  6. Region: process.env.VUE_APP_COS_REGION,
  7. };
  8. // 上传到腾讯云cos
  9. export const uploadObject = async (file,onProgress,type,callBackUp) => {
  10. try {
  11. const response = await getTmpSecretKey(); // 后台接口返回 密钥相关信息
  12. const data = response.data;
  13. const credentials = data && data.credentials;
  14. if (!data || !credentials) {
  15. console.error('未获取到参数');
  16. return;
  17. }
  18. // 初始化
  19. const cos = new COS({
  20. getAuthorization: (options, callback) => {
  21. callback({
  22. TmpSecretId: credentials.tmpSecretId,
  23. TmpSecretKey: credentials.tmpSecretKey,
  24. XCosSecurityToken: credentials.sessionToken,
  25. StartTime: data.startTime,
  26. ExpiredTime: data.expiredTime,
  27. });
  28. },
  29. });
  30. let fileName = file.name || ""
  31. const upload_file_name = new Date().getTime() + '.' + fileName.split(".")[fileName.split(".").length - 1];
  32. let date = new Date()
  33. let year = date.getFullYear()
  34. let month = date.getMonth() + 1
  35. let strDate = date.getDate()
  36. let uploadDay = `${year}${month}${strDate}`
  37. let videoKey = `/userVideo/${uploadDay}/${upload_file_name}`
  38. let courseKey = `/live/${uploadDay}/${upload_file_name}`
  39. let key = type ===1 ? courseKey : videoKey;
  40. return new Promise((resolve, reject) => {
  41. cos.uploadFile(
  42. {
  43. Bucket: config.Bucket, /* 必须 */
  44. Region: config.Region, /* 存储桶所在地域,必须字段 */
  45. Key: key, // 文件名
  46. StorageClass: 'STANDARD', // 上传类型,可选
  47. Body: file, // 上传文件对象
  48. // onTaskReady: function (taskId) {
  49. // // 用于中断分片上传回调
  50. // console.log('Task ready:', taskId);
  51. // callBackUp && callBackUp({cos,taskId})
  52. // },
  53. onProgress: function (progressData) {
  54. onProgress(progressData);
  55. },
  56. // onFileFinish: function (err, data, options) {
  57. // console.log(options.Key + '上传' + (err ? '失败' : '完成'));
  58. // },
  59. },
  60. (err, data) => {
  61. if (err) {
  62. reject(err);
  63. } else {
  64. // 将上传的key包含在返回的数据中
  65. const result = {
  66. ...data,
  67. urlPath: key
  68. };
  69. resolve(result);
  70. }
  71. }
  72. );
  73. });
  74. } catch (error) {
  75. console.error('Error during upload:', error);
  76. throw error;
  77. }
  78. };