Question

J'ai écrit un script CGI qui crée une image de manière dynamique à l'aide de données GET. Pour inclure cette image dans ma page Web, j'utilise le code suivant:

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

Le problème est que j'attends à l'avenir le " texte " le champ deviendra très long et l'URL deviendra trop grande. D'après Google, il ne semble pas y avoir de limite fixe quant à la longueur de l'URL (c.-à-d. Dépend du navigateur, du serveur, du proxy, etc.) Y a-t-il une meilleure façon de le faire?

Si cela compte, je travaille avec Django et Python et je ne peux utiliser aucun script côté client (c'est-à-dire JavaScript).

Salut, Ben

Était-ce utile?

La solution

Stockez le texte quelque part (une base de données, par exemple), puis transmettez-le à la clé primaire.

Autres conseils

Cela vous permettra d'obtenir une image à la suite d'un post - vous ne l'aimerez peut-être pas

  1. Placez une image iFrame à l'endroit où vous voulez l'image, redimensionnez-la et supprimez les barres de défilement
  2. Définissez le src sur un formulaire avec des entrées masquées définies sur vos paramètres de publication et l'action définie sur l'URL qui générera l'image
  3. soumettez le formulaire automatiquement avec JavaScript dans le fichier body.onload du code HTML de l'iFrame

    Ensuite, soit:

  4. restituer un ensemble de types de contenu à une image et diffuser les octets de l'image

    ou:

  5. stocke les paramètres de publication quelque part et génère un petit identifiant

  6. restituez du code HTML avec une balise img en utilisant l'ID dans l'URL - sur le serveur, recherchez les paramètres de publication

    ou:

  7. générer une page avec une balise d'image avec une image incorporée

    http://danielmclaren.net/2008 / 03 / incorporation-base64-image-data-dans-une-page Web

Rassemblez ce qui a déjà été dit, pourquoi ne pas créer deux pages? La première page envoie une demande POST lorsque le formulaire est soumis (disons à create_img.py) avec un paramètre text = xxxxxxx .... Ensuite, create_img.py prend le paramètre text, crée une image avec elle et l'insère (ou une référence du système de fichiers) dans la base de données, puis lors du rendu de la seconde page, génère des balises img telles que <img src="render_img.py?row_id=0122">. A ce stade, render_img.py interroge simplement la base de données pour l'image donnée. Avant de créer une image, vous pouvez vérifier si elle est déjà dans la base de données et donc réutiliser / recycler les images précédentes avec le même paramètre de texte.

img utilise GET. Vous devrez trouver un autre mécanisme. Pourquoi ne pas appeler la même fonctionnalité dans image.py et enregistrer le fichier en tant que fichier temporaire que vous référez dans la balise img? Ou encore, pourquoi ne pas enregistrer la valeur du texte dans une ligne de base de données lors du rendu de cette balise img et utiliser le paramètre row_id comme élément transmis dans le script image.py?

Vous pourrez peut-être atténuer le problème en compressant le texte dans le paramètre get.

À partir du lien ci-dessous, il semble que vous allez bien pendant un moment;)

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

Si vous utilisez django, vous pouvez peut-être le faire via une balise de modèle?

Quelque chose comme:

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

La fonction create_image crée l'image avec un nom de fichier factice / aléatoire / généré et renvoie le chemin.

Ceci évite d'avoir à obtenir ou à poster dans le script, et les images auront des noms de fichiers gérables.

Je peux voir quelques problèmes potentiels avec cette approche, je lance simplement l'idée là-bas;)

OK, je suis un peu en retard pour la soirée, mais vous pouvez utiliser un mélange de MHTML (pour IE7 et inférieur) et le schéma d’URI des données (pour tous les autres navigateurs modernes). Cela nécessite un peu de travail sur le client et le serveur, mais vous pouvez finalement vous retrouver avec

newimg.src = 'blah';

Vous trouverez une description de la procédure à suivre à l'adresse http://gingerbbm.com/?p= 127 .

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top