const AWS = require('aws-sdk'); const fs = require('fs'); const { fromBuffer } = require('file-type'); // Perbaikan di sini const path = require('path'); const crypto = require('crypto'); // Konfigurasi AWS SDK untuk Cloudflare R2 const r2 = new AWS.S3({ endpoint: 'https://90ea285cb6b03a79a36923f11a34c3a2.r2.cloudflarestorage.com', accessKeyId: '769433fbf8d0d975144746b83eb2619e', secretAccessKey: '1679293fecd820a92788bbc6825ff948117284e0a5bcdea025903f06bfc57716', region: 'auto', signatureVersion: 'v4', }); // Nama bucket dan file yang ingin diupload async function uFile(buffer) { const r2 = new AWS.S3({ endpoint: 'https://90ea285cb6b03a79a36923f11a34c3a2.r2.cloudflarestorage.com', accessKeyId: '769433fbf8d0d975144746b83eb2619e', secretAccessKey: '1679293fecd820a92788bbc6825ff948117284e0a5bcdea025903f06bfc57716', region: 'auto', signatureVersion: 'v4', }); const { ext } = fromBuffer(buffer); const fileName = 'file/' + rFileName() + '.' + ext; // Memperbaiki nama variabel try { const params = { Bucket: 'bookworm', Key: fileName, Body: buffer, ACL: 'public-read', // Ubah sesuai kebutuhan }; const data = r2.upload(params).promise(); return { status: 'success', message: 'File uploaded successfully.', location: `https://file.curvee.eu.org/${fileName}`, }; } catch (error) { return { status: 'error', message: 'Error uploading file', error: error.message, }; } }; function rFileName() { const randomBytes = crypto.randomBytes(10).toString('hex'); // 20 karakter heksadesimal return randomBytes; } function getFileExtension(fileName) { return path.extname(fileName); }