hsy.js 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. import TTUploader from 'tt-uploader'
  2. import Vue from "vue";
  3. import { HsyAssumeRoleService } from '@/api/course/userVideo'
  4. export const uploadToHSY = async (file, onProgress, type, callBackUp) => {
  5. try {
  6. const spaceName = Vue.prototype.$runtimeConfig.VUE_APP_HSY_SPACE
  7. if (!spaceName) {
  8. throw new Error('未配置火山云点播空间名称,请在「系统参数 → 前端配置」中填写「点播空间名称」')
  9. }
  10. const res = await HsyAssumeRoleService()
  11. //console.log('火山云 STS 凭证:', res)
  12. const credentials = res.data.result.credentials
  13. //console.log('火山云 credentials 凭证:', credentials)
  14. if (!credentials) {
  15. throw new Error('未获取到火山云 STS 凭证')
  16. }
  17. const uploader = new TTUploader({
  18. appId: '917052',
  19. userId: '68185444',
  20. videoConfig: {
  21. spaceName: spaceName,
  22. }
  23. })
  24. const date = new Date();
  25. const yyyy = date.getFullYear();
  26. const MM = String(date.getMonth() + 1).padStart(2, '0');
  27. const dd = String(date.getDate()).padStart(2, '0');
  28. const datePath = `${yyyy}${MM}${dd}`;
  29. const fileName = `${Date.now()}.mp4`;
  30. const remoteFileName = `course/${datePath}/${fileName}`;
  31. const fileKey = uploader.addFile({
  32. file,
  33. type: 'video',
  34. fileName:remoteFileName,
  35. stsToken: {
  36. CurrentTime: credentials.currentTime,
  37. ExpiredTime: credentials.expiredTime,
  38. SessionToken: credentials.sessionToken,
  39. AccessKeyID: credentials.accessKeyId,
  40. SecretAccessKey: credentials.secretAccessKey,
  41. },
  42. })
  43. return new Promise((resolve, reject) => {
  44. // 上传进度
  45. uploader.on('progress', (info) => {
  46. onProgress && onProgress({
  47. percent: info.percent,
  48. })
  49. })
  50. // 上传完成
  51. uploader.on('complete', (info) => {
  52. onProgress && onProgress({ percent: 1 })
  53. resolve({
  54. ...info.uploadResult,
  55. fileKey,
  56. })
  57. })
  58. // 上传失败
  59. uploader.on('error', (info) => {
  60. reject(info)
  61. })
  62. // 取消上传支持
  63. if (callBackUp) {
  64. callBackUp({
  65. uploader,
  66. fileKey,
  67. cancel: () => {
  68. try {
  69. uploader.removeFile(fileKey)
  70. reject(new Error('Upload cancelled by user'))
  71. } catch (e) {
  72. reject(e)
  73. }
  74. }
  75. })
  76. }
  77. uploader.start(fileKey)
  78. })
  79. } catch (error) {
  80. console.error('火山云上传失败:', error)
  81. throw error
  82. }
  83. }