| import crc32 from './crc32.js' | |
| import http from 'axios' | |
| import express from 'express' | |
| const app = express() | |
| const port = 7860 | |
| app.use(express.json()) | |
| app.use(express.urlencoded({ extended: true })) | |
| app.get('*', async (req, res) => { | |
| try { | |
| const file_url = req.path.replace(/^\//, '') | |
| const file = await http({ | |
| method: 'GET', | |
| url: file_url, | |
| responseType: 'arraybuffer' | |
| }) | |
| const hash = crc32(file.data) | |
| const upload_info = await http({ | |
| method: 'GET', | |
| url: 'https://data.emmmm.eu.org/upload/sg' | |
| }) | |
| const upload_result = await http({ | |
| method: 'POST', | |
| url: upload_info.data.url, | |
| headers: { | |
| 'content-crc32': hash, | |
| 'authorization': upload_info.data.authorization | |
| }, | |
| data: file.data | |
| }) | |
| if (upload_result.status == 200) { | |
| res.send(JSON.stringify({ | |
| vid: upload_info.data.vid, | |
| url: `https://sf16-sg-default.akamaized.net/obj/${upload_info.data.uri}` | |
| })) | |
| } else { | |
| throw Error | |
| } | |
| } catch (e) { | |
| res.send(e.toString()) | |
| } | |
| }) | |
| app.listen(port, async () => { | |
| console.log(`http://localhost:${port}`) | |
| }) |