cos.js 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  1. import COS from "cos-js-sdk-v5"
  2. import { getTmpSecretKey } from "@/api/common"
  3. console.log("环境变量:", process.env)
  4. console.log("NODE_ENV:", process.env.NODE_ENV)
  5. console.log("VUE_APP_COS_BUCKET:", process.env.VUE_APP_COS_BUCKET)
  6. console.log("VUE_APP_COS_REGION:", process.env.VUE_APP_COS_REGION)
  7. const config = {
  8. Bucket: process.env.VUE_APP_COS_BUCKET,
  9. Region: process.env.VUE_APP_COS_REGION,
  10. }
  11. console.log("COS配置:", config)
  12. export const uploadObject = async (file, onProgress, type, callBackUp) => {
  13. try {
  14. console.log(type)
  15. const response = await getTmpSecretKey()
  16. console.log("Key ", response)
  17. const data = response.data
  18. const credentials = data && data.credentials
  19. if (!data || !credentials) {
  20. console.error("未获取到参数")
  21. return
  22. }
  23. const cos = new COS({
  24. Timeout: 1200 * 1000,
  25. getAuthorization: (options, callback) => {
  26. callback({
  27. TmpSecretId: credentials.tmpSecretId,
  28. TmpSecretKey: credentials.tmpSecretKey,
  29. XCosSecurityToken: credentials.sessionToken,
  30. StartTime: data.startTime,
  31. ExpiredTime: data.expiredTime,
  32. })
  33. },
  34. })
  35. console.log("初始化成功")
  36. console.log(process.env)
  37. const fileName = file.name || ""
  38. const upload_file_name = new Date().getTime() + "." + fileName.split(".")[fileName.split(".").length - 1]
  39. const date = new Date()
  40. const year = date.getFullYear()
  41. const month = date.getMonth() + 1
  42. const strDate = date.getDate()
  43. const uploadDay = `${year}${month}${strDate}`
  44. const videoKey = `/userVideo/${uploadDay}/${upload_file_name}`
  45. const courseKey = `/course/${uploadDay}/${upload_file_name}`
  46. let liveKey;
  47. console.log("LIVE_PATH value:", process.env.VUE_APP_LIVE_PATH); // 添加这行查看实际值
  48. console.log("Type of LIVE_PATH:", typeof process.env.VUE_APP_LIVE_PATH); // 查看类型
  49. // 检查是否是空字符串或只有空格
  50. if (process.env.VUE_APP_LIVE_PATH && process.env.VUE_APP_LIVE_PATH.trim() !== '') {
  51. liveKey = `${process.env.VUE_APP_LIVE_PATH.trim()}/${uploadDay}/${upload_file_name}`;
  52. } else {
  53. liveKey = `/course/${uploadDay}/${upload_file_name}`;
  54. }
  55. console.log("liveKey={}",liveKey);
  56. const key = type === 3 ? liveKey : (type === 1 ? courseKey : videoKey);
  57. console.log("开始上传")
  58. return new Promise((resolve, reject) => {
  59. console.log("uploadFile")
  60. let taskId = null
  61. const uploadTask = cos.uploadFile(
  62. {
  63. Bucket: config.Bucket,
  64. Region: config.Region,
  65. Key: key,
  66. StorageClass: "STANDARD",
  67. Body: file,
  68. onTaskReady: (id) => {
  69. taskId = id
  70. console.log("Task ready:", taskId)
  71. if (callBackUp) {
  72. callBackUp({
  73. cos,
  74. taskId,
  75. cancel: () => {
  76. console.log("Cancelling COS upload:", taskId)
  77. cos.cancelTask(taskId)
  78. reject(new Error("Upload cancelled by user"))
  79. },
  80. })
  81. }
  82. },
  83. onProgress: (progressData) => {
  84. onProgress(progressData)
  85. },
  86. },
  87. (err, data) => {
  88. if (err) {
  89. reject(err)
  90. } else {
  91. const result = {
  92. ...data,
  93. urlPath: key,
  94. }
  95. console.log("上传成功", result)
  96. resolve(result)
  97. }
  98. },
  99. )
  100. })
  101. } catch (error) {
  102. console.error("Error during upload:", error)
  103. throw error
  104. }
  105. }