[YandexDiskUploader] Загрузка файлов в Яндекс.Диск
На фронтенде используется Dropzone JS. Внешний вид довольно легко кастомизируется — достаточно указать путь к CSS-файлу в соответствующей системной настройке.
Загрузка файлов осуществляется не в файловую систему сайта, а на Яндекс.Диск, доступ к которому нужно будет предоставить при установке дополнения. Сделать это достаточно однажды — токен сохраняется в системных настройках и используется в дальнейшем без всяких запросов.
Сниппет YandexDiskUploader выводит область для загрузки файлов. Расположить её можно в любом месте на странице — даже вне тега form. При вызове сниппета в параметре &inputId можно указать id инпута, в который после загрузки будет подставлена ссылка на папку в Диске с загруженными файлами. Эту ссылку можно отправить в письме или сохранить в базе данных. На странице дополнения есть пример добавления загрузки файлов в форму обратной связи.
Логику обработки ответа сервера можно переопределить, указав путь к JS-файлу в системной настройке.
Стоимость дополнения 290 руб. Приобрести можно как обычно, в магазине Modstore.pro:
modstore.pro/yandexdiskuploader
Комментарии: 11
Круто! Спасибо!
В input сохраняются прямые ссылки на файлы в облаке, или ссылки на страницу загрузки файла в Яндекс Диске?
Ок, понятно, спасибо за пример!
Очень полезная вещь! Во всю используем. Спасибо, Илья!
День добрый.
Возникла проблема на боевом сервере.
Файлы успешно прикрепляются, в папке tmp на хостинге создается соответствующий по размеру временный файл, но на яндекс.диске файлы загруженные весят 0 байт, т.е. пустые…
Такое впечатление, что сниппет просто создает файлы с указанным именем\расширением, но не копирует файлы.
Ошибок ни js ни php никаких не выдает.
На этой же базе данных, с этими же файлами на локальном сервере всё работает как часы.
В какую сторону копать?
Заранее спасибо!
Возникла проблема на боевом сервере.
Файлы успешно прикрепляются, в папке tmp на хостинге создается соответствующий по размеру временный файл, но на яндекс.диске файлы загруженные весят 0 байт, т.е. пустые…
Такое впечатление, что сниппет просто создает файлы с указанным именем\расширением, но не копирует файлы.
Ошибок ни js ни php никаких не выдает.
На этой же базе данных, с этими же файлами на локальном сервере всё работает как часы.
В какую сторону копать?
Заранее спасибо!
Здравствуйте. Напишите в поддержку, разберёмся.
Здравствуйте, Илья.
Спасибо за отклик и отличное дополнение!
Проблему решили.
Судя по всему проблема появилась после обновления на сервере библиотеки libcurl (было 7.62, стало 7.64.1)
Необходимо было в сниппете добавить:
Спасибо за отклик и отличное дополнение!
Проблему решили.
Судя по всему проблема появилась после обновления на сервере библиотеки libcurl (было 7.62, стало 7.64.1)
Необходимо было в сниппете добавить:
curl_setopt($ch, CURLOPT_PUT, true);
а перед этим согласно мануалу php еще и curl_setopt($ch, CURLOPT_INFILESIZE, filesize($_FILES[$inputId]['tmp_name']));
итого у нас получилось:$ch = curl_init($response['href']);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'PUT');
curl_setopt($ch, CURLOPT_INFILE, fopen($_FILES[$inputId]['tmp_name'], 'r'));
curl_setopt($ch, CURLOPT_INFILESIZE, filesize($_FILES[$inputId]['tmp_name']));
curl_setopt($ch, CURLOPT_UPLOAD, true);
curl_setopt($ch, CURLOPT_POST, false);
curl_setopt($ch, CURLOPT_PUT, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_exec($ch);
curl_close($ch);
Интересно, что
Т.е. upload должен работать, а не put
Но, нет…
В документации libcurl указано CURLOPT_PUT
DESCRIPTION
A parameter set to 1 tells the library to use HTTP PUT to transfer data. The data should be set with CURLOPT_READDATA and CURLOPT_INFILESIZE.
This option is deprecated since version 7.12.1. Use CURLOPT_UPLOAD!
Т.е. upload должен работать, а не put
Но, нет…
Может кому будет полезно:
Ссылку на загруженный файл на Яндекс.Диске мы отправляли в письме менеджеру.
Так вот в названии папки "MODX Яндекс.Диск" присутствует пробел и с ним были проблемы.
Ссылка не открывалась или вела на 404 страницу.
Поэтому пробел заменили на "MODX%20Яндекс.Диск"
Но для этого сделали отдельную переменную и плейсхолдер.
Т.к. сниппет наоборот с таким путём работать не сможет.
Ссылку на загруженный файл на Яндекс.Диске мы отправляли в письме менеджеру.
Так вот в названии папки "MODX Яндекс.Диск" присутствует пробел и с ним были проблемы.
Ссылка не открывалась или вела на 404 страницу.
Поэтому пробел заменили на "MODX%20Яндекс.Диск"
Но для этого сделали отдельную переменную и плейсхолдер.
Т.к. сниппет наоборот с таким путём работать не сможет.
Добрый день. Аналогичная проблема, грузит пустые файлы на диск.
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.