Как загрузить файл через Carrierwave через JSON API?

Я создаю API-интерфейс для манипулирования файлами в Rails, и мне нужно иметь возможность получить к нему доступ через отдельный гем. API использует Carrierwave, и эта часть работает без проблем. То, что я не понимаю, как сделать, это взять произвольный файл и доставить его в API из интерфейса gem.

Carrierwave принимает свои файлы как результатыFile.open('foo.jpg') или как POST из поля файла. Я действительно не уверен, что либо делает, чтобы сериализовать файл и отправить его вместе.

Как мне взять содержимое файла и превратить его во что-то, что я могу передать и опубликовать через JSON?

 Mark Tabler13 июн. 2012 г., 14:53
Это верно. API будет получать данные в формате JSON, поскольку он должен поддерживать интерфейс командной строки вместо интерфейса на основе браузера.
 Maurício Linhares13 июн. 2012 г., 04:05
Вы имеете в виду, что API получает материал в виде JSON вместо параметров формы?

Ответы на вопрос(1)

Решение Вопроса

на самом деле происходит специальная часть HTTP, называемая многочастным запросом. По сути, файл «прикрепляется» на запрос.

На вопрос ответит какая библиотека вы используете для отправки JSON в ваш API. Присоединение файла к запросу должно быть довольно распространенным явлением, но не все библиотеки могут его поддерживать.

Эта статья о переполнении стека, кажется, дает некоторые хорошие указания о том, как это сделать.

 27 сент. 2012 г., 18:32
Именно так. В частности, вы МОЖЕТЕ внедрить файл в JSON с использованием кодировки base64 или какой-либо другой кодировки ASCII, однако я не рекомендую этот путь, если он вам действительно не нужен.
 Mark Tabler27 сент. 2012 г., 08:28
Это отличный способ выполнить то, что я пытался сделать. Звучит так, как будто исходный вопрос начинается с неверной предпосылки - файл вообще не будет сериализован в объект JSON, но задействует совершенно другую часть протокола. В любом случае, эта библиотека дает мне отличное начало, и если я задаюсь вопросом, как она работает, я всегда могу найти исходный код этого. Спасибо!

Ваш ответ на вопрос