Как вернуть изображение из Rails API? - PullRequest
1 голос
/ 26 марта 2020

Просто чтобы уточнить, я пытаюсь вернуть изображения, которые я хранил, используя активное хранилище на моей машине, через localhost для целей тестирования разработки. Я не пытаюсь визуализировать изображения с локального хоста в inte rnet.

Итак, у меня есть модель с отношением has_one_attached к изображению, называемая сэмплом.

food.rb:

    include Rails.application.routes.url_helpers
    has_one_attached :sample

    def get_sample_url
        url_for(self.sample)
    end 

Поэтому я использую get_sample_url выше, чтобы получить изображения. Он возвращал путь, и я просто предположил, что он работает, и создал весь мой API, используя похожий код и получая похожие ссылки. Но когда я помещаю ссылку в браузер, она ничего не возвращает.

Возвращается ссылка http://localhost:3001/rails/active_storage/blobs/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaHBCZz09IiwiZXhwIjpudWxsLCJwdXIiOiJibG9iX2lkIn19--c83eba36bfec0607652b47d857104d3cf9e88009/cute%20owl.jpg

Я хочу знать: это идеальный способ вернуть изображения из Rails API? Почему ссылка не возвращает мои изображения?

1 Ответ

0 голосов
/ 27 марта 2020

Какой идеальный способ вернуть изображения из Rails API?

Это зависит.

Если мы говорим о JSON, то на самом деле это не двоичный тип, поэтому чтобы включить изображение в сам ответ JSON, вам потребуется его кодировать в base64. Так как это резко увеличивает размер файла, это то, что вы действительно могли бы рассмотреть только для простых изображений, таких как штрих-коды или QR-коды.

Для большинства «обычных» изображений, таких как аватара пользователя и т. П., Вы хотите просто включить URL в json, который клиент может запросить, когда / если ему нужно изображение.

Если область вашего приложения мала, вы можете использовать хранилище файловой системы . Но Rails не собирается делать ваш локальный хост доступным целым rnet.

Но если вы хотите, чтобы ваше приложение масштабировалось, используйте облачную CDN, которая является быстрой и распределенной. Я хотел бы рассмотреть возможность использования CDN с существующим адаптером вместо Cloudinary, если вы хотите потратить время на то, чтобы заняться чем-то другим, а не настройкой.

...