fix(images): Clean up image paths, compress large images, and fix openinary URLs
This commit is contained in:
@@ -0,0 +1,78 @@
|
||||
import fs from 'fs';
|
||||
import path from 'path';
|
||||
import { fileURLToPath } from 'url';
|
||||
// Setup environment variables manually from .env
|
||||
const __dirname = path.dirname(fileURLToPath(import.meta.url));
|
||||
const envPath = path.resolve(__dirname, '../.env');
|
||||
const envContent = fs.readFileSync(envPath, 'utf8');
|
||||
|
||||
const env = {};
|
||||
envContent.split('\n').forEach(line => {
|
||||
const [key, ...valueParts] = line.split('=');
|
||||
if (key && valueParts.length > 0) {
|
||||
let value = valueParts.join('=').trim();
|
||||
if (value.startsWith('"') && value.endsWith('"')) {
|
||||
value = value.substring(1, value.length - 1);
|
||||
}
|
||||
env[key] = value;
|
||||
}
|
||||
});
|
||||
|
||||
const IMAGES_DIR = path.resolve(__dirname, '../public/images');
|
||||
const OPENINARY_API_URL = env.OPENINARY_API_URL || 'https://media.ayris.tech';
|
||||
const OPENINARY_API_KEY = env.OPENINARY_API_KEY;
|
||||
|
||||
async function uploadFiles(dir) {
|
||||
const entries = fs.readdirSync(dir, { withFileTypes: true });
|
||||
|
||||
for (const entry of entries) {
|
||||
const fullPath = path.join(dir, entry.name);
|
||||
if (entry.isDirectory()) {
|
||||
await uploadFiles(fullPath);
|
||||
} else if (entry.isFile() && /\.(png|jpg|jpeg|webp)$/i.test(entry.name)) {
|
||||
const relativePath = path.relative(IMAGES_DIR, fullPath);
|
||||
const folder = path.join('aydogan', path.dirname(relativePath)).replace(/\\/g, '/');
|
||||
const filename = path.basename(entry.name);
|
||||
|
||||
console.log(`Uploading: ${relativePath} to folder: ${folder}`);
|
||||
|
||||
const buffer = fs.readFileSync(fullPath);
|
||||
const ext = path.extname(entry.name).toLowerCase().slice(1);
|
||||
const mime = ext === 'jpg' ? 'jpeg' : ext;
|
||||
const blob = new Blob([buffer], { type: `image/${mime}` });
|
||||
|
||||
const formData = new FormData();
|
||||
formData.append("files", blob, filename);
|
||||
formData.append("folder", folder);
|
||||
|
||||
try {
|
||||
const uploadRes = await fetch(`${OPENINARY_API_URL}/api/upload`, {
|
||||
method: "POST",
|
||||
headers: {
|
||||
Authorization: `Bearer ${OPENINARY_API_KEY}`
|
||||
},
|
||||
body: formData,
|
||||
});
|
||||
|
||||
if (!uploadRes.ok) {
|
||||
const errorText = await uploadRes.text();
|
||||
console.error(`Failed to upload ${relativePath}:`, errorText);
|
||||
} else {
|
||||
const data = await uploadRes.json();
|
||||
console.log(`Successfully uploaded: ${data.files[0].url}`);
|
||||
}
|
||||
|
||||
// Wait 1 second to respect rate limits (max 100 requests / 60 seconds = ~1.6 req/s max)
|
||||
await new Promise(resolve => setTimeout(resolve, 1000));
|
||||
|
||||
} catch (error) {
|
||||
console.error(`Error uploading ${relativePath}:`, error.message);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
console.log('Starting upload to Openinary...');
|
||||
uploadFiles(IMAGES_DIR)
|
||||
.then(() => console.log('Upload finished!'))
|
||||
.catch(err => console.error('Upload failed:', err));
|
||||
Reference in New Issue
Block a user