Включение динамического изображения в веб-страницу с помощью POST? - PullRequest
2 голосов
/ 28 октября 2008

Я написал скрипт CGI, который динамически создает изображение с использованием данных GET. Чтобы включить это изображение в мою веб-страницу, я использую следующий код:

<img src="image.py?text=xxxxxxxxxxxxxx">

Проблема в том, что я ожидаю, что в будущем текстовое поле станет очень длинным, а URL станет слишком большим. Похоже, что в Googling не существует фиксированного ограничения длины URL (т.е. зависит от браузера, сервера, прокси и т. Д.). Есть ли лучший способ сделать это?

Если это имеет значение, я работаю с Django и Python и не могу использовать скрипты на стороне клиента (например, JavaScript).

Ура, Бен

Ответы [ 8 ]

5 голосов
/ 28 октября 2008

Сохраните текст где-нибудь (например, в базе данных), а затем передайте первичный ключ.

1 голос
/ 28 октября 2008

Составление того, что уже было сказано, как насчет создания двух страниц. Первая страница отправляет запрос POST при отправке формы (скажем, create_img.py) с параметром text = xxxxxxx .... Затем create_img.py берет параметр text и создает с ним изображение и вставляет его (или ссылку на файловую систему) в базу данных, затем при рендеринге второй страницы генерирует теги img, например <img src="render_img.py?row_id=0122">. На этом этапе render_img.py просто запрашивает БД для данного изображения. Перед созданием изображения вы можете проверить, есть ли оно в базе данных, поэтому повторно использовать / перерабатывать предыдущие изображения с тем же текстовым параметром.

1 голос
/ 28 октября 2008

Это даст вам изображение в результате POST - вам может не понравиться

  1. Поместите iFrame, где вы хотите изображение и размер его и удалите полосы прокрутки
  2. Установите для src форму со скрытыми входными данными, для которой заданы параметры вашего сообщения, а для действия - URL, который сгенерирует изображение.
  3. отправить форму автоматически с JavaScript в body.onload HTML-кода iFrame

    Тогда либо:

  4. Служит обратно для типа содержимого, установленного для изображения, и передает байты изображения

    или

  5. где-то хранить параметры записи и генерировать маленький идентификатор

  6. возврат HTML с тегом img с использованием идентификатора в URL - на сервере найдите параметры записи

    или

  7. создать страницу с тегом изображения со встроенным изображением

    http://danielmclaren.net/2008/03/embedding-base64-image-data-into-a-webpage

0 голосов
/ 27 июня 2009

ОК, я немного опоздал на вечеринку, но вы могли бы использовать смесь MHTML (для IE7 и ниже) и схему URI данных (для всех других современных браузеров). Это требует немного работы как на клиенте, так и на сервере, но в итоге вы можете получить

newimg.src = 'blah';

Описание того, как это сделать, http://gingerbbm.com/?p=127.

0 голосов
/ 28 октября 2008

Если вы используете django, может, вместо этого вы можете сделать это с помощью тега шаблона?

Что-то вроде:

<img src="{% create_image "This is the text that will be displayed" %}">

Функция create_image создаст изображение с фиктивным / случайным / сгенерированным именем файла и вернет путь.

Это позволяет избежать необходимости получать или отправлять сценарий, и изображения будут иметь управляемые имена файлов.

Я вижу некоторые потенциальные проблемы с этим подходом, я просто отбрасываю идею;)

0 голосов
/ 28 октября 2008

По ссылке ниже, похоже, что с вами все будет хорошо;)

http://www.boutell.com/newfaq/misc/urllength.html

0 голосов
/ 28 октября 2008

Вы можете решить проблему, сжав текст в параметре get.

0 голосов
/ 28 октября 2008

IMG использовать GET. Вам придется придумать другой механизм. Как насчет вызова той же функциональности в image.py и сохранения файла как временного файла, который вы указали в теге img? Или как насчет сохранения значения текста в строке базы данных во время рендеринга этого тега img и использования row_id как того, что вы передаете в скрипт image.py?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...