2010-04-08 10 views
3

J'essaie d'obtenir une référence aux images avec src dans le schéma URI. Un exemple serait les images sur google.com/news.Impossible de stocker l'URI de données dans la base de données sans effacer + caractères

si j'avertis (escape (saveObj.image)); Je reçois quelque chose comme ci-dessous:

data%3Aimage/jpeg%3Bbase64%2C/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjL/wAARCABQAFADASIAAhEBAxEB/8QAHAAAAQUBAQEAAAAAAAAAAAAABgIDBAUHAQAI/8QAPhAAAgECBAMFBgIGCwEAAAAAAQIDBBEABRIhEzFhBkFRcYEUIjKRobFCwRUjJFKC0QcWJSZiY3Jzg7Lw4f/EABoBAAIDAQEAAAAAAAAAAAAAAAMEAAIFBgH/xAAmEQABBAEEAQMFAAAAAAAAAAABAAIDESEEEjFBBRMisVFhcZGh/9oADAMBAAIRAxEAPwAr7L5pD2gyY5JXEtLGAFY/EU2sR1U2+nXF/pZFKuffViGPW5ximQUEz1cNdPNKms6g8TlWBufDcHyxsdLUmqoYqhiWZ1BYtsSe+/ 

Je passe que dans le fichier js et je utilise django pour obtenir ce dans une table MySQL de type utf8_unicode_ci en utilisant modelform.save, mais quand j'examine ce qui est dans la base de données, je vois :

data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjL/wAARCABQAFADASIAAhEBAxEB/8QAHAAAAQUBAQEAAAAAAAAAAAAABgIDBAUHAQAI/8QAPhAAAgECBAMFBgIGCwEAAAAAAQIDBBEABRIhEzFhBkFRcYEUIjKRobFCwRUjJFKC0QcWJSZiY3Jzg7Lw4f/EABoBAAIDAQEAAAAAAAAAAAAAAAMEAAIFBgH/xAAmEQABBAEEAQMFAAAAAAAAAAABAAIDESEEEjFBBRMisVFhcZGh/9oADAMBAAIRAxEAPwAr7L5pD2gyY5JXEtLGAFY/EU2sR1U2 nXF/pZFKuffViGPW5ximQUEz1cNdPNKms6g8TlWBufDcHyxsdLUmqoYqhiWZ1BYtsSe 

la principale différence est que, dans ma base de données tous les caractères « + » de l'original ont été dépouillés et remplacés par des espaces. Des idées? Je deviens aveugle en essayant de comprendre ça! : P

La seule javascript J'exécute sur le src avant de passer le long de WebService via xmlhttprequest (POST, webservice, TRUE) est la suivante:

escape(image) where image = src of a google news image. 

Répondre

2

Le problème est que Django URLFields sont automatiquement transmis à la urlsplit méthode et qui supprime des choses comme ceci depuis + signifie également l'espace dans les URL.

Comme vous pouvez le voir here, la validation de URLField le fait automatiquement. Ainsi, vous pouvez soit utiliser un CharField ou au lieu de créer une coutume URLField comme ceci:

class CustomURLField(forms.URLField): 
    def to_python(self, value): 
     return value 

Prenez note qu'il ne sera pas ajouter automatiquement http plus si vous faites cela.

+0

Merci pour la réponse rapide. J'utilise actuellement: img_link = models.TextField (null = True, vide = True) parce que je ne suis pas sûr de la taille des liens img de base64 (ils semblent énormes). En utilisant models.TextField, existe-t-il une contrainte similaire? Je n'arrive pas à trouver une raison pour que ce soit le cas. – citizencane

+0

@citizencane: à quoi ressemble votre formulaire? Je suppose que certains s'échapper est incorrect quelque part. Notez également que 'escape()' n'est pas la même chose que 'encodeURI()'. – Wolph

+0

pour ce champ le formulaire est Des copies de classe (models.Model): \t img_link = models.CharField (null = True, vide = True, max_length = 3500) – citizencane

0

Depuis + dans une URL signifie espace, les espaces sont bien, juste tant que vous encoder l'URL à nouveau avant d'interroger le serveur pour cela. On dirait qu'il supprime également le slash final.

Questions connexes