// Конфигурация Yandex Cloud Storage
const YANDEX_STORAGE_CONFIG = {
endpoint: 'https://storage.yandexcloud.net',
bucket: 'orion-image',
publicUrl: 'https://storage.yandexcloud.net/orion-image/'
};
// Функция для получения списка папок и файлов
async function getStorageData() {
try {
// Используем JSON для получения структуры бакета
const response = await fetch(`${YANDEX_STORAGE_CONFIG.publicUrl}?delimiter=/&list-type=2`);
if (!response.ok) throw new Error('Не удалось получить данные из хранилища');
const text = await response.text();
const parser = new DOMParser();
const xmlDoc = parser.parseFromString(text, 'text/xml');
// Извлекаем префиксы (папки) и объекты (файлы)
const folders = [];
const files = [];
// Получаем папки
const prefixes = xmlDoc.getElementsByTagName('CommonPrefixes');
for (let i = 0; i < prefixes.length; i++) {
const prefix = prefixes[i].getElementsByTagName('Prefix')[0].textContent;
if (prefix && prefix.endsWith('/')) {
const folderName = prefix.replace(/\/$/, ''); // Убираем слеш в конце
folders.push(folderName);
}
}
// Получаем файлы
const contents = xmlDoc.getElementsByTagName('Contents');
for (let i = 0; i < contents.length; i++) {
const key = contents[i].getElementsByTagName('Key')[0].textContent;
if (key && !key.endsWith('/')) { // Игнорируем папки
files.push(key);
}
}
return { folders, files };
} catch (error) {
console.error('Ошибка при загрузке данных из хранилища:', error);
return { folders: [], files: [] };
}
}
// Функция для получения файлов из конкретной папки
async function getFilesFromFolder(folderName) {
try {
const response = await fetch(
`${YANDEX_STORAGE_CONFIG.publicUrl}?prefix=${folderName}/&delimiter=/&list-type=2`
);
if (!response.ok) throw new Error(`Не удалось получить файлы из папки ${folderName}`);
const text = await response.text();
const parser = new DOMParser();
const xmlDoc = parser.parseFromString(text, 'text/xml');
const files = [];
const contents = xmlDoc.getElementsByTagName('Contents');
for (let i = 0; i < contents.length; i++) {
const key = contents[i].getElementsByTagName('Key')[0].textContent;
// Проверяем, что это файл изображения
if (key && !key.endsWith('/') && /\.(jpg|jpeg|png|gif|webp|avif)$/i.test(key)) {
files.push({
fullPath: key,
fileName: key.split('/').pop(),
url: `${YANDEX_STORAGE_CONFIG.publicUrl}${key}`
});
}
}
return files;
} catch (error) {
console.error(`Ошибка при загрузке файлов из папки ${folderName}:`, error);
return [];
}
}
// Функция для инициализации всех изображений на сайте
async function initializeYandexStorageImages() {
try {
// Получаем структуру хранилища
const storageData = await getStorageData();
// Создаем объект с данными по папкам
const folderData = {};
// Для каждой папки получаем файлы
for (const folder of storageData.folders) {
const files = await getFilesFromFolder(folder);
if (files.length > 0) {
folderData[folder] = files;
}
}
console.log('Загруженные данные из Yandex Cloud Storage:', folderData);
return folderData;
} catch (error) {
console.error('Ошибка инициализации изображений:', error);
return {};
}
}