В новом уроке мы рассмотрим как создавать директории, добавлять файлы и скачивать файлы через 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.
Wolf4D
Вставить на страницу кусок программного кода, лишённый объяснений - это ещё не статья...
ikrusenstern
Да он свой курс пиарит. А так судя по коду можно сказать что писал очередной вITшник вчерашний выпусник такого же курса.