Рельсы берут base64 - PullRequest
       18

Рельсы берут base64

2 голосов
/ 19 ноября 2011

В рельсах мне нужно взять строку base64 и использовать ее для генерации картинки в рельсах. Теперь у меня возникли проблемы, потому что мне нужно взаимодействовать с AJAX-вызовами (я строго работаю на стороне сервера, другой парень выполняет эту работу с клиентом) для отправки изображений. До сих пор я принимал запросы в своем приложении, передавая данные через URL (в запросах AJAX), но теперь я не уверен, возможно ли передать такую ​​огромную строку через URL. Как я могу взять данные (например, как он мог передать их мне), чтобы создать картинку.

Примечание: я до сих пор использовал скрепку для своего приложения, но теперь загрузка через форму - это не вариант, это должен быть вызов AJAX, когда данные передаются за один вызов.

1 Ответ

0 голосов
/ 19 ноября 2011

Вы правы, большинство браузеров ограничивают длину URL.Ограничение на IE8 / 9 составляет 2083 символа.Даже если ваш конкретный браузер имеет более высокий предел, многие серверы также ограничивают длину URL (ограничение по умолчанию для Apache составляет около 8 КБ).Было бы лучше отправить изображение в виде запроса POST с данными в теле POST.

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

На самом деле размещение данных будет зависеть от того, какую библиотеку JavaScript вы используете.Вот пример в jQuery, который вы, вероятно, захотите подключить к событию onclick кнопки отправки.Это предполагает, что у вас есть именованный маршрут с именем process_image.По вашему мнению, этот код будет отображаться.

$.post(<%= process_image_path %>, { b64_img: "your_base64_image_data" });

В вашем контроллере вы можете получить доступ к опубликованным данным с помощью параметров [: b64_img].Если вы хотите вернуть что-то из контроллера обратно клиенту, вы можете сделать это в контроллере:

render :json => @model_object

и изменить вызов jquery так, чтобы вы могли что-то сделать с возвращаемым значением:

$.post(<%= process_image_path %>, { b64_img: "your_base64_image_data" }, 
  function(data) {
    // do something with the data returned by the controller
  });

Надеюсь, это поможет.Вы можете прочитать больше о пост-звонке jQuery, который я использовал здесь: http://api.jquery.com/jQuery.post/

Dan

...