@fobya

Как загрузить в бакет Yandex Cloud файл, используя axios nodejs?

const yandexApiKey = '**********************************'

        // Информация о файле и бакете
        const bucketName = 'speech-bucket2';
        const objectName = args.fileName;
        const audioBytes = await fs.readFile(path.join(__dirname, `../imgs/${args.fileName}`));
        console.log(audioBytes)

        const uploadUrl = `http://${bucketName}.storage.yandexcloud.net/${objectName}`;
        await axios.get(uploadUrl, {
          headers: {
            'Authorization': `Api-Key ${yandexApiKey}`,
            'Content-Type': 'image/jpeg', // Замените на соответствующий MIME-тип вашего файла
          },
        })
        .then((response) => {
          console.log('Файл успешно загружен:', response.data);
        })
        .catch((error) => {
          console.log(error)
          console.error('Ошибка при загрузке файла:', error.message);
        });


1) Создал сервисный аккаунт, дал роль storage.admin
2) Создал бакет, указав в правах доступа сервисный аккаунт
3) Создал api-key
4) Не получилось
Что я сделал не так?
  • Вопрос задан
  • 53 просмотра
Решения вопроса 1
В твоем коде есть несколько моментов, которые нужно исправить, чтобы загрузить файл в бакет Yandex Cloud с использованием axios в Node:

1) Метод загрузки: не GET, а PUT. Для загрузки файла нужно использовать PUT.
2) Передача файла: нужно передать содержимое файла в теле запроса, у тебя только заголовки.
3) Content-Type: Указанный вами Content-Type должен соответствовать типу загружаемого файла. Ты указал 'image/jpeg', убедись, что это действительно соответствует типу файла.

Пример кода для загрузки файла может выглядеть так:

const axios = require('axios');
const fs = require('fs').promises;
const path = require('path');

// Информация о файле и бакете
const yandexApiKey = '**********************************';
const bucketName = 'speech-bucket2';
const objectName = args.fileName;

(async () => {
    try {
        const filePath = path.join(__dirname, `../imgs/${args.fileName}`);
        const audioBytes = await fs.readFile(filePath);

        const uploadUrl = `http://${bucketName}.storage.yandexcloud.net/${objectName}`;

        // Используем метод PUT для загрузки файла
        const response = await axios.put(uploadUrl, audioBytes, {
            headers: {
                'Authorization': `Api-Key ${yandexApiKey}`,
                'Content-Type': 'image/jpeg', // Убедитесь, что это правильный MIME-тип для вашего файла
            },
        });

        console.log('Файл успешно загружен:', response.data);
    } catch (error) {
        console.error('Ошибка при загрузке файла:', error.message);
    }
})();


Проверь еще следующее:
- Убедись, что путь к файлу и его MIME-тип указаны правильно.
- Проверьте, что API ключ и настройки доступа к бакету настроены корректно.
- Возможно, потребуется дополнительно настроить CORS настройки.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы