first commit
This commit is contained in:
85
scratch/upload_resort_photos.js
Normal file
85
scratch/upload_resort_photos.js
Normal file
@@ -0,0 +1,85 @@
|
||||
const cloudinary = require('cloudinary').v2;
|
||||
require('dotenv').config({ path: '.env.local' });
|
||||
const fs = require('fs');
|
||||
const path = require('path');
|
||||
|
||||
cloudinary.config({
|
||||
cloud_name: process.env.NEXT_PUBLIC_CLOUDINARY_CLOUD_NAME,
|
||||
api_key: process.env.CLOUDINARY_API_KEY,
|
||||
api_secret: process.env.CLOUDINARY_API_SECRET
|
||||
});
|
||||
|
||||
const CLOUDINARY_ROOT = 'salhotel';
|
||||
|
||||
async function uploadFile(filePath, cloudinaryFolder) {
|
||||
console.log(`Uploading ${filePath} to ${cloudinaryFolder}...`);
|
||||
try {
|
||||
const result = await cloudinary.uploader.upload(filePath, {
|
||||
folder: `${CLOUDINARY_ROOT}/${cloudinaryFolder}`,
|
||||
use_filename: true,
|
||||
unique_filename: false,
|
||||
overwrite: true
|
||||
});
|
||||
console.log(`Successfully uploaded: ${result.public_id}`);
|
||||
return {
|
||||
localPath: filePath,
|
||||
url: result.secure_url,
|
||||
publicId: result.public_id
|
||||
};
|
||||
} catch (e) {
|
||||
console.error(`Failed to upload ${filePath}:`, e.message);
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
async function scanAndUpload(dir, currentCloudinaryPath = '') {
|
||||
const entries = fs.readdirSync(dir, { withFileTypes: true });
|
||||
let results = [];
|
||||
|
||||
for (const entry of entries) {
|
||||
const fullPath = path.join(dir, entry.name);
|
||||
|
||||
if (entry.isDirectory()) {
|
||||
// Normalize folder names for Cloudinary (e.g., konaklama -> rooms)
|
||||
let nextCloudinaryPath = currentCloudinaryPath;
|
||||
const folderName = entry.name.toLowerCase();
|
||||
|
||||
if (folderName === 'konaklama') nextCloudinaryPath = ''; // Root konaklama
|
||||
else if (folderName === 'odalar') nextCloudinaryPath = 'rooms';
|
||||
else if (folderName === 'rezidans') nextCloudinaryPath = 'residence';
|
||||
else if (folderName === 'restaurant') nextCloudinaryPath = 'dining';
|
||||
else {
|
||||
nextCloudinaryPath = currentCloudinaryPath ? `${currentCloudinaryPath}/${folderName}` : folderName;
|
||||
}
|
||||
|
||||
const recursiveResults = await scanAndUpload(fullPath, nextCloudinaryPath);
|
||||
results = results.concat(recursiveResults);
|
||||
} else {
|
||||
const ext = path.extname(entry.name).toLowerCase();
|
||||
if (['.jpg', '.jpeg', '.png', '.webp'].includes(ext)) {
|
||||
const uploadResult = await uploadFile(fullPath, currentCloudinaryPath);
|
||||
if (uploadResult) {
|
||||
results.push(uploadResult);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return results;
|
||||
}
|
||||
|
||||
async function main() {
|
||||
const docsDir = path.join(process.cwd(), 'docs');
|
||||
if (!fs.existsSync(docsDir)) {
|
||||
console.error('Docs directory not found!');
|
||||
return;
|
||||
}
|
||||
|
||||
console.log('--- Starting Resort Photos Upload ---');
|
||||
const allUploads = await scanAndUpload(docsDir);
|
||||
|
||||
fs.writeFileSync('scratch/resort_upload_report.json', JSON.stringify(allUploads, null, 2));
|
||||
console.log(`\nUpload completed! ${allUploads.length} images processed.`);
|
||||
console.log('Report saved to scratch/resort_upload_report.json');
|
||||
}
|
||||
|
||||
main();
|
||||
Reference in New Issue
Block a user