2008-10-28 4 views
2

J'ai écrit un script CGI qui crée dynamiquement une image en utilisant les données GET. Pour inclure cette image dans ma page Web, je suis en utilisant le code suivant:Inclure une image dynamique dans une page Web à l'aide du POST?

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

Le problème est que je pense à l'avenir le champ « texte » va être très long et l'URL deviendra trop grand. De googler autour il ne semble pas y avoir une limite fixe sur la longueur de l'URL (c'est-à-dire dépend du navigateur, serveur, proxy, etc.) Y at-il une meilleure façon de le faire?

Si cela est important, je travaille avec Django et Python et je ne peux pas utiliser de scripts côté client (JavaScript).

Cheers, Ben

Répondre

5

Enregistrez le texte quelque part (par exemple, une base de données), puis passez la clé primaire.

0

utilisation img GET. Vous devrez trouver un autre mécanisme. Que diriez-vous d'appeler la même fonctionnalité dans image.py et d'enregistrer le fichier en tant que fichier temporaire que vous référez dans la balise img? Ou que diriez-vous de sauvegarder la valeur du texte dans une ligne db pendant le rendu de cette balise img et d'utiliser row_id comme ce que vous passez dans le script image.py?

1

Cela vous obtiendrez une image à la suite d'un POST - vous ne pouvez pas aimer

  1. Mettez un iFrame où vous voulez que l'image et la taille et supprimer les barres de défilement
  2. Réglez le src à une forme avec des entrées cachées fixées à vos paramètres de poste et l'action définie à l'URL qui va générer l'image
  3. soumettre le formulaire automatiquement avec JavaScript dans le body.onload du code HTML de iFrame

    Alors, que ce soit:

  4. Serve retour d'un type de contenu défini sur une image et le flux de l'image octets

    ou:

  5. stocker les paramètres de poste quelque part et générer un petit id

  6. servent dos HTML avec une balise img utilisant l'identifiant dans l'url - sur le serveur rechercher les paramètres de poste

    ou:

  7. Générez une page avec une balise d'image avec une image incrustée

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

1

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

0

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

0

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

Quelque chose comme:

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

La fonction create_image pourrait créer l'image avec un mannequin/aléatoire/nom de fichier généré, et retourne le chemin. Ceci évite d'avoir à écrire ou à envoyer au script, et les images auront des noms de fichiers gérables.

Je peux voir des problèmes potentiels avec cette approche, je suis juste jeter l'idée là-bas;)

0

OK, je suis un peu en retard à la fête, mais vous pouvez utiliser un mélange de MHTML (pour IE7 et ci-dessous) et le schéma d'URI de données (pour tous les autres navigateurs modernes). Il ne nécessite un peu de travail à la fois client et serveur, mais vous pouvez finir finalement avec

newimg.src = 'blah'; 

L'écriture sur la façon de le faire est à http://gingerbbm.com/?p=127.

Questions connexes