2013-08-12 2 views
2

В одном веб-сервисе, написанном на Rails, я хотел бы ответить файлом вместе с дополнительной информацией.Многопользовательский ответ для веб-службы

Для этого я считаю, что ответьте на мультиданные. Как отправить многостраничный ответ с файлом и json?

Если есть лучший способ сделать это, пожалуйста, дайте мне знать. Заметьте, что невозможно добавить дополнительные данные в файл, который я отправляю.

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

+0

какую библиотеку вы используете для загрузки файлов, носителя или скрепки? –

+0

@SachinSingh carrierwave – fotanus

+0

Ваши файлы будут только изображениями? –

ответ

2

Я не знаю точно, с каким интерфейсом вы пользуетесь, и каковы требования к совместимости с вашим браузером, или вам нужен веб-сервис для интеграции только с другими приложениями, но при условии, что вы общаетесь с сервером через ajax и ваше приложение работает в современном браузере (или вам разрешено использовать Flash-плагин), вы можете вернуть содержимое файла как закодированную в base64 строку как часть json-ответа. Таким образом, в контроллере рельсы вы бы что-то вроде этого:

render json: {success: true, file: {name: 'invoice.pdf', data: Base64.encode64(@file.read), extra_info: 'some info'}} 

на стороне клиента, вы можете обработать этот JSON, получить все метаданные, что вам нужно от него, а также позволить пользователю сохранить файл на свой компьютер. Для этого вы можете использовать flash plugin или native api implementation

Таким образом вы можете вернуть пару файлов с любыми метаданными, которые вы хотите с ними, и на стороне клиента пользователь может сохранять файлы при необходимости. Кроме того, тот же веб-сервис может использоваться другими приложениями, если они могут анализировать json.

+0

Спасибо, Юри, это интересная альтернатива. – fotanus

0

Я уверен, что вы сделали некоторые погуглите уже, вы видели this уже? Кажется, что есть Gem за то, что вы пытаетесь выполнить, Gem, похоже, выглядит довольно старым.

Смежные вопросы