- Как скачать файл или архив файлов с CLOUD.MAIL через PHP CURL, зная публичную ссылку, например https://cloud.mail.ru/public/N74q/PqfRqxhbB?
- Как загрузить файл на Облако Mail средствами php?
- Есть ли у облака mail.ru REST API? Или сервис, который предоставляет API к облаку?
- Войдите, чтобы написать ответ
- Как загрузить изображение вместе с другими данными в виде списка (form-data), используя класс dto для входящих данных на сервере?
Как скачать файл или архив файлов с CLOUD.MAIL через PHP CURL, зная публичную ссылку, например https://cloud.mail.ru/public/N74q/PqfRqxhbB?
Да. Это понятно. Пытаюсь скачать файл по публичной ссылке https://cloud.mail.ru/public/N74q/PqfRqxhbB
Авторизация проходит без ошибок, но файл получить не удаётся.
Bulanov-Key, попробуй другие клиенты. видишь, автор сам пишет
Примечание
Может не работать на некоторых web серверах, возможно из-за версии CURL.
Я делал так.
Вроде бы все работало, за исключением того, что нельзя записать файл под тем же именем, что и по ссылке. Наверное как то можно и это имя узнать, но это мне было не нужно — поэтому не заморачивался.
Плюс к этому, я так понимаю, этот метод работает, если по публичной ссылке лежит только один файл.
$login = 'login@mail.ru'; //Любой логин на mail.ru $file = 'https://cloud.mail.ru/public/4iJK/AAABBB'; //Публичная ссылка $out = __DIR__ . 'file.xlsx'; //Куда записывать файл $url = 'https://cloud.mail.ru/api/v2/dispatcher?api=2&email=' . $login . '&_=' . time(); $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_HEADER, 0); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 30); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); $answer = json_decode(curl_exec($ch), true); curl_close($ch); $weblink_prefix = $answer['body']['weblink_get'][0]['url']; $weblink_suffix = str_replace('https://cloud.mail.ru/public', '', $file); file_put_contents($out, file_get_contents($weblink_prefix . $weblink_suffix));
Как загрузить файл на Облако Mail средствами php?
Приветствую, пытаюсь загрузить файл (zip) на облако mail, прочитав статью , начал писать код.
Авторизация, получение токена прошло успешно, осталось главное, загрузить файл, посмотрел какие запросы отправляет сайт:
Первый запрос OPTIONS идет сюда, но ответа от него нет
https://cloclo19-upload.cloud.mail.ru/upload/?cloud_domain=2&x-email=(Логин)%40mail.ru&fileapi14750746778546
После чего выполняется вторая команда на тот же адрес, но уже POST и с каким то Request Payload (Content-Disposition: form-data; name=»file»; filename=»localhost.rar»
), который уже возвращает хеш:
https://cloclo19-upload.cloud.mail.ru/upload/?cloud_domain=2&x-email=(Логин)%40mail.ru&fileapi14750746778546
И уже третий запрос, запрос к api:
https://cloud.mail.ru/api/v2/file/add
Тут уже передается сам файл хеш для загрузки.
Это все понятно, пора было писать код, но на первом же этапе все остановилось:
$file = [ 'name' => 'book.zip', 'path' => 'book.zip', 'size' => filesize('book.zip') ]; curl_setopt($this->curl, CURLOPT_URL, 'https://cloclo19-upload.cloud.mail.ru/upload/?cloud_domain=2&x-email=(Логин)%40mail.ru&fileapi14750746778546'); curl_setopt($this->curl, CURLOPT_HEADER, true); curl_setopt($this->curl, CURLOPT_POST, true); curl_setopt($this->curl, CURLOPT_HTTPHEADER, array("Content-Type:multipart/form-data")); curl_setopt($this->curl, CURLOPT_POSTFIELDS, array("filedata" => "@" . $file['path'], "filename" => $file['name'])); curl_setopt($this->curl, CURLOPT_INFILESIZE, $file['size']); curl_setopt($this->curl, CURLOPT_RETURNTRANSFER, true); $result = curl_exec($this->curl);
HTTP/1.1 100 Continue HTTP/1.1 200 OK Server: Tengine/2.0.0 Date: Wed, 28 Sep 2016 15:03:03 GMT Content-Type: text/plain Content-Length: 0 Connection: keep-alive Keep-Alive: timeout=20 Strict-Transport-Security: max-age=31556926; includeSubDomains X-XSS-Protection: 1; mode=block; report=https://cspreport.mail.ru/xxssprotection X-Content-Type-Options: nosniff X-Host: cloclo19.i.mail.ru
Есть ли у облака mail.ru REST API? Или сервис, который предоставляет API к облаку?
Стоит задача прикрутить к проекту на Laravel облако mail.ru, чтобы грузить(- получать) файлы в (- из) облако.
Но что-то не могу найти ничего.
Писал в тех поддержку, ответили что REST API нет. Есть только WebDAV, но это совсем не то.
Простой 6 комментариев
iBird Rose, edward_freedom, нужно именно облако mail.ru, так как клиент им пользуется, и хранит на нём файлы, уже несколько лет.
Мне нужно наше текущее приложение на Laravel синхронизировать с их текущим облаком, чтобы загружать / получать файлы через приложение.
iBird Rose, а через Яндекс.Диск я уже организовывал процесс год назад (у них есть библиотеки для работы с API, всё здорово). Но такая логика не зашла всё же для клиента, как показала практика (сложно бизнес-процессы перестроить). В итоге выпилил этот функционал.
А сейчас опять потребность возникла интеграции с их облаком. Вот и думаю, какие варианты возможны.
На платных эккаунтах для облака доступен WebDAV, для которого полно готовых библиотек и который можно подключить как файловую систему.
REST API есть, как у большинства веб-приложений, но этот API не является публичным. Если поищите, можете найти готовые разборы методов или сами посмотреть их, и даже библиотеки, например https://github.com/SerjPopov/cloud-mail-ru-php но использование непубличного API это всегда риск, т.к. он может меняться без предупреждения.