Проблема с реализацией виджета Rails Cloudinary

#ruby-on-rails #ruby-on-rails-5 #cloudinary

#ruby-on-rails #ruby-on-rails-5 #cloudinary

Вопрос:

Я нахожусь в процессе перехода от виджета Dropzone к виджету Cloudinary и сталкиваюсь с множеством проблем.

Во-первых, Dropzone в настоящее время прекрасно работает с загрузками в cloudinary. Я перехожу на их проприетарный виджет по ряду причин, которые просто отвлекут этот пост.

Проблема, с которой я сталкиваюсь, на первый взгляд «проста». Изображения правильно загружаются в Cloudinary. Именно в следующем сообщении формы у меня возникают проблемы.

Dropzone автоматически создает необходимые скрытые входные данные и значения…Cloudinary вы должны создать свой собственный. Итак, я это сделал, и это не только не работает, входные значения сильно отличаются от того, что dropzone генерирует для того же изображения. Я не могу найти логику в dropzone.js это может объяснить, как создаются входные данные.

Например, вот что dropzone отображает для одного изображения:

 <input type="hidden" name="entity[job_entries_attributes][0][images][]" value="eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaHBBNkpLQWc9PSIsImV4cCI6bnVsbCwicHVyIjoiYmxvYl9pZCJ9fQ==--7d13c16894d2a146f1ac85e12ddea03d9c14c26e">
 

Когда я выполняю рулон вручную, у меня есть доступ к объекту, возвращенному из прямой загрузки в Cloudinary — public_id, asset_id и т. Д. Но ни один из них не похож на указанное выше значение. Я предполагаю, что из-за этого не удается выполнить рендеринг post и последующего изображения.

У кого-нибудь есть опыт работы с этим??? Сводит меня с ума…

Ответ №1:

Виджет загрузки — это интерактивный пользовательский интерфейс для загрузки изображений в вашу учетную запись библиотеки мультимедиа Cloudinary, и его использование может быть расширено в зависимости от требований варианта использования. Хотя у виджета не так много функций, как у Dropzone, но вы можете использовать различные события для включения дополнительных пользовательских процессов с использованием javascript или HTML (см. Примеры демонстраций здесь и здесь).

 <div id="widgetdiv"></div>

<script type="text/javascript">
        cloudinary.openUploadWidget({
                    cloudName: 'cloudname',
                    inlineContainer: '#widgetdiv',
                    uploadPreset: 'uploadPreset',
                    showPoweredBy: false,
                    sources: ['local','instagram']},
        (error, result) => {
                    if (!error amp;amp; result amp;amp; result.event === "success") {
                        console.log('Done! Here is the image info: ', result.info);

                        console.log('Custom implementations here...');
                        
                        var filename = result.info.secure_url.split('/').pop().split('#')[0].split('?')[0];
                        var filesize = result.info.bytes;

                        // Populate form, card container, post to another endpoint, etc 
                }
            }
        );
</script>