API Яндекс.Диск (PHP) #3: Загрузка и скачивание файлов

от автора

В новом уроке мы рассмотрим как создавать директории, добавлять файлы и скачивать файлы через 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.


ссылка на оригинал статьи https://habr.com/ru/articles/749168/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *