cloud.js 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145
  1. const mm = require('music-metadata')
  2. const uploadPlugin = require('../plugins/songUpload')
  3. const md5 = require('md5')
  4. const createOption = require('../util/option.js')
  5. module.exports = async (query, request) => {
  6. let ext = 'mp3'
  7. // if (query.songFile.name.indexOf('flac') > -1) {
  8. // ext = 'flac'
  9. // }
  10. if (query.songFile.name.includes('.')) {
  11. ext = query.songFile.name.split('.').pop()
  12. }
  13. query.songFile.name = Buffer.from(query.songFile.name, 'latin1').toString(
  14. 'utf-8',
  15. )
  16. const filename = query.songFile.name
  17. .replace('.' + ext, '')
  18. .replace(/\s/g, '')
  19. .replace(/\./g, '_')
  20. const bitrate = 999000
  21. if (!query.songFile) {
  22. return Promise.reject({
  23. status: 500,
  24. body: {
  25. msg: '请上传音乐文件',
  26. code: 500,
  27. },
  28. })
  29. }
  30. if (!query.songFile.md5) {
  31. // 命令行上传没有md5和size信息,需要填充
  32. query.songFile.md5 = md5(query.songFile.data)
  33. query.songFile.size = query.songFile.data.byteLength
  34. }
  35. const res = await request(
  36. `/api/cloud/upload/check`,
  37. {
  38. bitrate: String(bitrate),
  39. ext: '',
  40. length: query.songFile.size,
  41. md5: query.songFile.md5,
  42. songId: '0',
  43. version: 1,
  44. },
  45. createOption(query),
  46. )
  47. let artist = ''
  48. let album = ''
  49. let songName = ''
  50. try {
  51. const metadata = await mm.parseBuffer(
  52. query.songFile.data,
  53. query.songFile.mimetype,
  54. )
  55. const info = metadata.common
  56. if (info.title) {
  57. songName = info.title
  58. }
  59. if (info.album) {
  60. album = info.album
  61. }
  62. if (info.artist) {
  63. artist = info.artist
  64. }
  65. // if (metadata.native.ID3v1) {
  66. // metadata.native.ID3v1.forEach((item) => {
  67. // // console.log(item.id, item.value)
  68. // if (item.id === 'title') {
  69. // songName = item.value
  70. // }
  71. // if (item.id === 'artist') {
  72. // artist = item.value
  73. // }
  74. // if (item.id === 'album') {
  75. // album = item.value
  76. // }
  77. // })
  78. // // console.log({
  79. // // songName,
  80. // // album,
  81. // // songName,
  82. // // })
  83. // }
  84. // console.log({
  85. // songName,
  86. // album,
  87. // songName,
  88. // })
  89. } catch (error) {
  90. console.log(error)
  91. }
  92. const tokenRes = await request(
  93. `/api/nos/token/alloc`,
  94. {
  95. bucket: '',
  96. ext: ext,
  97. filename: filename,
  98. local: false,
  99. nos_product: 3,
  100. type: 'audio',
  101. md5: query.songFile.md5,
  102. },
  103. createOption(query),
  104. )
  105. if (res.body.needUpload) {
  106. const uploadInfo = await uploadPlugin(query, request)
  107. // console.log('uploadInfo', uploadInfo.body.result.resourceId)
  108. }
  109. // console.log(tokenRes.body.result)
  110. const res2 = await request(
  111. `/api/upload/cloud/info/v2`,
  112. {
  113. md5: query.songFile.md5,
  114. songid: res.body.songId,
  115. filename: query.songFile.name,
  116. song: songName || filename,
  117. album: album || '未知专辑',
  118. artist: artist || '未知艺术家',
  119. bitrate: String(bitrate),
  120. resourceId: tokenRes.body.result.resourceId,
  121. },
  122. createOption(query),
  123. )
  124. // console.log({ res2, privateCloud: res2.body.privateCloud })
  125. // console.log(res.body.songId, 'songid')
  126. const res3 = await request(
  127. `/api/cloud/pub/v2`,
  128. {
  129. songid: res2.body.songId,
  130. },
  131. createOption(query),
  132. )
  133. // console.log({ res3 })
  134. return {
  135. status: 200,
  136. body: {
  137. ...res.body,
  138. ...res3.body,
  139. // ...uploadInfo,
  140. },
  141. cookie: res.cookie,
  142. }
  143. }