File size: 3,614 Bytes
b688d12 0806a3e b688d12 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 | 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;
// Configure AWS R2
const r2 = new AWS.S3({
endpoint: 'https://90ea285cb6b03a79a36923f11a34c3a2.r2.cloudflarestorage.com',
accessKeyId: '769433fbf8d0d975144746b83eb2619e',
secretAccessKey: '1679293fecd820a92788bbc6825ff948117284e0a5bcdea025903f06bfc57716',
region: 'auto',
signatureVersion: 'v4',
});
// Use memory storage for multer
const upload = multer({ storage: multer.memoryStorage() });
// Function to upload buffer to R2
async function uploadToR2(buffer, filename) {
const params = {
Bucket: 'bookworm',
Key: `file/${filename}`, // Path in bucket
Body: buffer,
ACL: 'public-read',
};
return r2.upload(params).promise();
}
// Handle GET requests at /
app.get('/', (req, res) => {
res.sendFile(path.join(__dirname, 'index.html'), (err) => {
if (err) {
res.status(err.status).end();
}
});
});
// Handle GET requests at /upload
app.get('/upload', (req, res) => {
res.status(405).json({
status: false,
message: "Method not allowed. Please use POST to upload files."
});
});
// Handle POST requests at /upload
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,
});
}
});
// Fetcher
app.get('/get', async (req, res) => {
const userAgent = req.get('User-Agent');
const { url } = req.query;
// Validasi parameter url
if (!url) {
return res.status(400).json({
status: 400,
message: "Please input parameter url!"
});
}
try {
// Ambil data dari URL menggunakan axios
const response = await axios.get(url, {
headers: {
"User-Agent": userAgent
}
});
// Kirimkan data hasil fetch
res.status(200).send(response.data);
} catch (e) {
// Tangani error jika ada
res.status(500).json({
status: 500,
message: "Error fetching the URL.",
error: e.message
});
console.log(e);
}
});
// Handle 404 and redirect to /
app.use((req, res) => {
res.redirect('/');
});
// Start server
app.listen(port, () => {
console.log(`App listening at http://localhost:${port}`);
});
// Function to generate random name
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;
}
|