| const express = require('express'); |
| const multer = require('multer'); |
| const AWS = require('aws-sdk'); |
| const path = require('path'); |
| const axios = require('axios'); |
| const app = express(); |
| const port = process.env.PORT || 7860 || 7861 || 8000 || 3000 || 8080 || 2022; |
|
|
| |
| const r2 = new AWS.S3({ |
| endpoint: 'https://90ea285cb6b03a79a36923f11a34c3a2.r2.cloudflarestorage.com', |
| accessKeyId: '769433fbf8d0d975144746b83eb2619e', |
| secretAccessKey: '1679293fecd820a92788bbc6825ff948117284e0a5bcdea025903f06bfc57716', |
| region: 'auto', |
| signatureVersion: 'v4', |
| }); |
|
|
| |
| const upload = multer({ storage: multer.memoryStorage() }); |
|
|
| |
| async function uploadToR2(buffer, filename) { |
| const params = { |
| Bucket: 'bookworm', |
| Key: `file/${filename}`, |
| Body: buffer, |
| ACL: 'public-read', |
| }; |
| return r2.upload(params).promise(); |
| } |
|
|
| |
| app.get('/', (req, res) => { |
| res.sendFile(path.join(__dirname, 'index.html'), (err) => { |
| if (err) { |
| res.status(err.status).end(); |
| } |
| }); |
| }); |
|
|
| |
| app.get('/upload', (req, res) => { |
| res.status(405).json({ |
| status: false, |
| message: "Method not allowed. Please use POST to upload files." |
| }); |
| }); |
|
|
| |
| app.post('/upload', upload.single('file'), async (req, res) => { |
| if (!req.file) { |
| return res.status(400).json({ status: false, message: "No file uploaded" }); |
| } |
|
|
| const encodedOriginalName = encodeURIComponent(req.file.originalname); |
| const filename = `v-${randomName(4)}-${encodedOriginalName}`; |
|
|
| try { |
| const r2Response = await uploadToR2(req.file.buffer, filename); |
| res.status(200).json({ |
| status: true, |
| message: "File uploaded successfully", |
| result: { |
| size: req.file.size, |
| original_name: req.file.originalname, |
| mimetype: req.file.mimetype, |
| url: `https://file.curvee.eu.org/file/${filename}`, |
| } |
| }); |
| } catch (error) { |
| console.error(error); |
| res.status(500).json({ |
| status: false, |
| message: "Error uploading to R2", |
| error: error.message, |
| }); |
| } |
| }); |
|
|
| |
|
|
| app.get('/get', async (req, res) => { |
| const userAgent = req.get('User-Agent'); |
| const { url } = req.query; |
|
|
| |
| if (!url) { |
| return res.status(400).json({ |
| status: 400, |
| message: "Please input parameter url!" |
| }); |
| } |
|
|
| try { |
| |
| const response = await axios.get(url, { |
| headers: { |
| "User-Agent": userAgent |
| } |
| }); |
|
|
| |
| res.status(200).send(response.data); |
|
|
| } catch (e) { |
| |
| res.status(500).json({ |
| status: 500, |
| message: "Error fetching the URL.", |
| error: e.message |
| }); |
| console.log(e); |
| } |
| }); |
|
|
| |
| app.use((req, res) => { |
| res.redirect('/'); |
| }); |
|
|
|
|
| |
| app.listen(port, () => { |
| console.log(`App listening at http://localhost:${port}`); |
| }); |
|
|
| |
| function randomName(length) { |
| let result = ''; |
| const characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'; |
| for (let i = 0; i < length; i++) { |
| result += characters.charAt(Math.floor(Math.random() * characters.length)); |
| } |
| return result; |
| } |
|
|