main.js 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217
  1. const fs = require('fs');
  2. const express = require('express');
  3. const app = express();
  4. const app_serve = express();
  5. const mysql = require('mysql2')
  6. const SendSeekable = require('send-seekable');
  7. const pool = mysql.createPool({
  8. keepAliveInitialDelay: 10000, enableKeepAlive: true,
  9. })
  10. const db = mysql.createConnection({
  11. host: 'mc.andyxie.cn', user: 'instrunet', password: 'Moyingren2015', database: "instrunet_data", pool: pool,
  12. })
  13. const nodemailer = require('nodemailer')
  14. const bodyParser = require("body-parser");
  15. const nrc = require('node-run-cmd')
  16. const https = require("node:https");
  17. app.use(bodyParser.json({"limit": "200mb"}));
  18. app.use(express.json());
  19. app_serve.use(bodyParser.json({"limit": "200mb"}));
  20. app_serve.use(express.json());
  21. app_serve.use(SendSeekable)
  22. const transporter = nodemailer.createTransport({
  23. host: 'smtp.qq.com',
  24. port: 465,
  25. secure: true,
  26. auth: {
  27. user: '3095864740@qq.com',
  28. pass: 'caemyuagapsadfff',
  29. }
  30. })
  31. app.post('/submit', function (req, res) {
  32. let uuid = crypto.randomUUID()
  33. db.connect(function (err) {
  34. if (err) {
  35. console.log(err)
  36. }
  37. })
  38. res.header("Access-Control-Allow-Origin", "*");
  39. try {
  40. fetch(req.body.file).then(res => {
  41. res.arrayBuffer().then(r => fs.writeFileSync("./" + uuid, Buffer.from(r)));
  42. })
  43. res.end("api_success");
  44. } catch (err) {
  45. res.status(500).send("Server Error");
  46. return
  47. }
  48. const callback = function (d) {
  49. console.log(d.toString());
  50. }
  51. const errcb = function (d) {
  52. console.log(d.toString());
  53. }
  54. let kind_of = [];
  55. switch (req.body.kind) {
  56. case 0:
  57. kind_of[0] = `audio-separator ./${uuid} --model_filename UVR-MDX-NET-Inst_HQ_5.onnx --mdx_segment_size 4000 --mdx_overlap 0.75 --output_format mp3 --mdx_batch_size 300 --output_dir output`
  58. kind_of[1] = `./output/${uuid}_(Instrumental)_UVR-MDX-NET-Inst_HQ_5.mp3`
  59. kind_of[2] = `${uuid}_(Instrumental)_UVR-MDX-NET-Inst_HQ_5.mp3`
  60. kind_of[3] = `./output/${uuid}_(Vocals)_UVR-MDX-NET-Inst_HQ_5.mp3`
  61. break;
  62. case 1:
  63. kind_of[0] = `audio-separator ./${uuid} --model_filename UVR_MDXNET_KARA.onnx --mdx_segment_size 4000 --mdx_overlap 0.75 --output_format mp3 --mdx_batch_size 300 --output_dir output`
  64. kind_of[1] = `./output/${uuid}_(Instrumental)_UVR_MDXNET_KARA.mp3`
  65. kind_of[2] = `${uuid}_(Instrumental)_UVR_MDXNET_KARA.mp3`
  66. kind_of[3] = `./output/${uuid}_(Vocals)_UVR_MDXNET_KARA.mp3`
  67. break;
  68. }
  69. nrc.run([kind_of[0]], {
  70. onData: callback, onError: errcb
  71. }).then(() => {
  72. db.execute(("INSERT INTO instrunet_entry (uuid, song_name, album_name, link_to, databinary, artist,kind) VALUES (?,?,?,?,?,?,?)"), [uuid, req.body.name, req.body.albumName, req.body.link, fs.readFileSync(kind_of[1]), req.body.artist, req.body.kind])
  73. db.unprepare(() => {
  74. })
  75. fs.rm(kind_of[1], (err) => {
  76. if (err) {
  77. console.log(err);
  78. }
  79. })
  80. fs.rm(uuid, (err) => {
  81. if (err) {
  82. console.log(err);
  83. }
  84. })
  85. if (req.body.email !== undefined) {
  86. console.log(req.body.email)
  87. transporter.sendMail({
  88. from: '"xiey0" <xiey0@qq.com>',
  89. to: req.body.email,
  90. subject: "你的音频已处理完成。",
  91. text: "你的音频已处理完成。",
  92. html:
  93. "<h1>哈喽👋</h1><p>你在伴奏网网站上传的音频已经处理完毕,快来下载吧!<br/>下载链接:<br/><a href='https://andyxie.cn:8201/" + uuid + "'>这里</a><br/><br/>" +
  94. "与其他网站不一样,本邮件发送邮箱真的有个伞兵在后面!<br/>" +
  95. "请随意骚扰!</p>"
  96. }).then((result) => {
  97. console.log("Message sent: %s", result.messageId)
  98. })
  99. }
  100. })
  101. })
  102. app.options('/submit', function (req, res) {
  103. res.header("Access-Control-Allow-Origin", "*");
  104. res.header("Access-Control-Allow-Headers", "Content-Type");
  105. res.end()
  106. })
  107. app.post('/search_api', function (req, res) {
  108. function OnFetched(err, rows) {
  109. try {
  110. res.header("Access-Control-Allow-Origin", "*");
  111. res.end(JSON.stringify(rows));
  112. } catch (e) {
  113. }
  114. }
  115. db.execute(`SELECT uuid, song_name, album_name, artist, kind
  116. FROM instrunet_entry
  117. WHERE song_name like '%${req.body.searchStr}%'
  118. or album_name like '%${req.body.searchStr}%'
  119. or artist like '%${req.body.searchStr}%'`, OnFetched)
  120. db.unprepare()
  121. })
  122. app.options('/search_api', function (req, res) {
  123. res.header("Access-Control-Allow-Origin", "*");
  124. res.header("Access-Control-Allow-Headers", "Content-Type");
  125. res.end()
  126. })
  127. app.get("/getSingle", function (req, res) {
  128. if (req.query.id) {
  129. db.execute(`SELECT song_name, album_name, artist
  130. FROM instrunet_entry
  131. WHERE uuid = "${req.query.id}"`, function (err, rows) {
  132. if (err) {
  133. console.log(err);
  134. }
  135. res.contentType("application/json");
  136. res.header("Access-Control-Allow-Origin", "*");
  137. res.header("Access-Control-Allow-Headers", "Content-Type");
  138. res.end(JSON.stringify(rows[0]));
  139. })
  140. }else{
  141. res.contentType("application/json");
  142. res.header("Access-Control-Allow-Origin", "*");
  143. res.header("Access-Control-Allow-Headers", "Content-Type");
  144. res.end("{}")
  145. }
  146. })
  147. app_serve.get('/:uuid', function (req, res, next) {
  148. async function Provider(err, rows) {
  149. try {
  150. res.header("Access-Control-Allow-Origin", "*");
  151. /** @type {ArrayBuffer}*/
  152. let buffer = rows[0].databinary
  153. res.sendSeekable(buffer)
  154. db.unprepare()
  155. } catch (e) {
  156. console.log(e)
  157. console.log("Triggered err");
  158. }
  159. }
  160. db.execute(`SELECT databinary
  161. FROM instrunet_entry
  162. WHERE uuid = '${req.params.uuid}'`, Provider)
  163. db.unprepare()
  164. })
  165. https.createServer({
  166. key: fs.readFileSync('andyxie.cn.key'), cert: fs.readFileSync('andyxie.cn.pem')
  167. }, app).listen(8080)
  168. https.createServer({
  169. key: fs.readFileSync('andyxie.cn.key'), cert: fs.readFileSync('andyxie.cn.pem')
  170. }, app_serve).listen(8079)
  171. // app.listen(8080)
  172. // app_serve.listen(8079)