В настоящее время я работаю над конструктором страниц с редактированием контента, аналогичным этой замечательной платформе для блогов, на которой вы это читаете. Для нас, в Adjust Creative, мы можем добавлять тематические исследования, сообщения в блогах, статьи и страницы продуктов, другой контент на наш собственный веб-сайт, используя Ruby on Rails & React.

Один из камней преткновения, с которым я столкнулся, заключается в том, что великолепный Medium Editor Rails gem имеет возможность перетаскивать изображение с вашего рабочего стола на веб-страницу. Но из-за того, как я делаю что-то, когда я отправляю его в API, он сохраняет изображение как большой двоичный объект в базе данных, а это не так, как должно быть.

Он должен быть отправлен в корзину Amazon S3 или, по крайней мере, в файловую систему. Затем сохраните ссылку вместо капли.

Итак, я изо всех сил пытался реализовать этот плагин medium-editor-insert-plugin. Это отличный плагин. Но из-за его зависимости от Bootstrap и других библиотек, а также из-за того, что я использую Rails 5, его конвейер и React, гораздо сложнее попытаться заставить все пакеты работать вместе, чем просто построить себя.

Я серьезно потратил около 3 часов, пытаясь заставить все драгоценные камни и бауэр играть хорошо, прежде чем выбросить их и сделать что-то сам намного быстрее.

Мое решение заключалось в том, чтобы просто скопировать класс MediumEditorDrag из Github и заменить расширение этим новым классом. Так просто.

Теперь, когда мой контент сохраняется в базе данных, он сохраняет только строковые значения, а не огромный текстовый объект изображения.

Вот переопределенный класс javascript:

На стороне ruby ​​вам нужно что-то сделать с blob-файлом данных изображения и ответить, чтобы он заработал. На самом деле я загружаю на Amazon S3, что немного сложнее.

Вот простой код, позволяющий принять большой двоичный объект, преобразовать его в файл, загрузить его на свой веб-сайт и указать путь:

Надеюсь, это поможет кому-то, кому нужно «простое» решение для загрузки файлов с использованием Javascript / ajax и Ruby on Rails.