В новом уроке мы рассмотрим как создавать директории, добавлять файлы и скачивать файлы через API Яндекс.Диск. Так же мы рассмотрим процесс отправки PUT запросов.

Полный список всех записей курса находится на сайте https://prog-time.ru/course_cat/yandeks-disk-api-php/ или в публикациях на Хабр https://habr.com/ru/users/Prog-Time/posts/

Создание директорий на Яндекс.Диск через API

Для создания директорий мы будем отправлять запросы по уже известному нам пути.

https://cloud-api.yandex.net/v1/disk/resources/

Только в данном случае нам нужно отправлять запросы методом PUT.

Мы в предыдущих уроках подготовили наш метод sendQueryYaDisk() под отправку PUT запросов, поэтому просто передадим ему в качестве третьего параметра строку ‘PUT’.

/**
 * Метод для создания директории
 *
 * @param array $arrParams параметры для отправки запроса
 *
 * @return array
 */
public function disk_resources_create_dir(array $arrParams): array
{
    $urlQuery = 'https://cloud-api.yandex.net/v1/disk/resources/';
    return $this->sendQueryYaDisk($urlQuery, $arrParams, 'PUT');
}

Загрузка файлов на Яндекс.Диск через API

Загрузка файлов производится с помощью двух запросов:

  • запрос на получение ссылки для загрузки

  • отправка файлов по полученному URL из предыдущего запроса

Я объединил эти два запроса в один метод.

Метод будет принимать 2 параметра:

  • $filePath — путь до файла на вашем сервере

  • $dirPath — путь до директории на Яндекс.Диск куда нужно загрузить файл

/**
 * Метод для загрузки файлов
 *
 * @param string $filePath путь до файла
 * @param string $dirPath путь до директории на Яндекс.Диск
 *
 * @return string
 */
public function disk_resources_upload(string $filePath, string $dirPath = ''): string
{
  /* отправляем запрос на получение ссылки для загрузки */
  $arrParams = [
      'path' => $dirPath . basename($filePath),
      'overwrite' => 'true',
  ];
  $urlQuery = 'https://cloud-api.yandex.net/v1/disk/resources/upload';
  $resultQuery = $this->sendQueryYaDisk($urlQuery, $arrParams);
  /* ----------------- */
  
  if (empty($resultQuery['error'])) {
    /* Если ошибки нет, то отправляем файл на полученный URL. */
    $fp = fopen($filePath, 'r');
  
    $ch = curl_init($resultQuery['href']);
    curl_setopt($ch, CURLOPT_PUT, true);
    curl_setopt($ch, CURLOPT_UPLOAD, true);
    curl_setopt($ch, CURLOPT_INFILESIZE, filesize($filePath));
    curl_setopt($ch, CURLOPT_INFILE, $fp);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($ch, CURLOPT_HEADER, false);
    $http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
    curl_close($ch);
  
    return $http_code;
  } else {
      return $resultQuery['message'];
  }

}

Скачивание файла с Яндекс.Диска через API

Скачивание файлов происходит так же с помощью двух запросов:

  • запрос для получения разрешения на скачивание

  • запрос для загрузки файла на сервер

Метод для загрузки будет принимать 2 параметра, только в этот раз первый параметр будет принимать путь до файла в Яндекс.Диске, а второй параметр будет указывать директорию в которую этот файл нужно загрузить.

/**
 * Метод для скачивания файлов на сервера
 *
 * @param string $filePath путь до файла в Яндекс.Диске
 * @param string $dirPath путь до директории на сервере
 *
 * @return array
 */
public function disk_resources_download(string $filePath, string $dirPath = ''): array
{
  /* отправляем запрос на получение ссылки для скачивания */
  $arrParams = [
      'path' => $filePath,
  ];
  $urlQuery = 'https://cloud-api.yandex.net/v1/disk/resources/download';
  $resultQuery = $this->sendQueryYaDisk($urlQuery, $arrParams);
  /* ----------------- */
  
  if(empty($resultQuery['error'])) {
      $file_name = $dirPath . basename($filePath);
      $file = @fopen($file_name, 'w');
  
      $ch = curl_init($resultQuery['href']);
      curl_setopt($ch, CURLOPT_FILE, $file);
      curl_setopt($ch, CURLOPT_HTTPHEADER, array('Authorization: OAuth ' . $this->token));
      curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
      curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
      curl_setopt($ch, CURLOPT_HEADER, false);
      $resultQuery = curl_exec($ch);
      curl_close($ch);
  
      fclose($file);
  
      return [
          'message' => 'Файл успешно загружен',
          'path' => $file_name,
      ];
  } else {
      return $resultQuery;
  }

}

Таким образом в новом уроке мы с вами научились:

  • загружать файлы с сервера на Яндекс.Диск через API

  • скачивать файлы с Яндекс.Диска на сервер через API

  • создавать директории на Яндекс.Диске через API

В следующем уроке я вам покажу как публиковать и убирать с публикации файлы загруженные через API.

Комментарии (2)


  1. Wolf4D
    21.07.2023 05:15
    +3

    Вставить на страницу кусок программного кода, лишённый объяснений - это ещё не статья...


    1. ikrusenstern
      21.07.2023 05:15
      +2

      Да он свой курс пиарит. А так судя по коду можно сказать что писал очередной вITшник вчерашний выпусник такого же курса.