2010-05-14 3 views
3

J'essaie de serveur reposant que l'on peut télécharger l'image, Par l'utilisation de django-piston je peux mettre, obtenir, afficher des informations avec repos, mais je ne sais pas comment télécharger l'image.Can module django-piston créer télécharger image webservice reposant

+0

en dire plus ... – miku

+0

désolé pour le manque de détails. J'ai besoin de créer un service web reposant qui permet de télécharger l'image et de renvoyer l'identifiant et l'URL de l'image en utilisant django-piston, Est-il possible de faire ça? – vernomcrp

Répondre

0

à peu près. Techniquement, c'est juste un post http.

0

D'une part, oui. Si vous avez les données d'image, il est possible de l'envoyer par la poste à un gestionnaire qui sait comment le gérer; Si vous le faites correctement, il devrait, théoriquement, être disponible dans request.FILES à votre gestionnaire. HTTP simple.

D'autre part, non. Afin de faire un téléchargement AJAX comme celui-ci, vous auriez en quelque sorte obtenir les données d'image sans que l'utilisateur ne soumette réellement un formulaire. C'est pourquoi les "ajax upload forms" sont si difficiles à mettre en œuvre, et utilisent généralement des astuces comme les iframes cachés pour faire leur travail. Pour autant que je sache, seul Firefox et ses gecko kin permettent ce type d'accès au contenu binaire d'un champ de fichier, via la méthode getAsBinary() File object's.

0

Vous pouvez certainement faire le POST. Le fichier (s) sera disponible dans la request.FILES (le piston ne gênera pas).

Afin de faire le PUT, nous devrons apporter quelques modifications au piston pour prendre en charge l'en-tête x-method-override. C'est ce que je fais pour permettre PUT et DEL de flash. (Ne pas oublier d'ajouter l'en-tête quand vous faites le POST pour le faire s'interprété comme un PUT)

est Voici quelques exemples middleware:

class x_http_methodoverride_middleware(): 
    def process_request(self, request): 
     if 'HTTP_X_HTTP_METHODOVERRIDE' in request.META: 
      newMethod = request.META['HTTP_X_HTTP_METHODOVERRIDE'] 
      if 'PUT' == newMethod.upper(): 
       request.method = 'PUT' 
       request.META['REQUEST_METHOD'] = 'PUT' 
       request.PUT = request.POST     
      if 'DELETE' == newMethod.upper() or 'DEL' == newMethod.upper(): 
       request.method = 'DELETE' 
       request.META['REQUEST_METHOD'] = 'DELETE' 
       request.DELETE = request.POST 

(le code est d'un billet de piston ouvert ici http://bitbucket.org/jespern/django-piston/issue/83/use-x-http-method-override-to-override-put)

0

Vous pouvez trouver deux réponses ici: http://groups.google.com/group/django-piston/browse_thread/thread/6f3f964b8b3ccf72/bd1658121bb1874c?show_docid=bd1658121bb1874c&pli=1

Une façon est d'utiliser request.FILES pour obtenir le nom de fichier, puis d'enregistrer l'image:

def create(self, request, nickname): 
    name = request.FILES["image"].name 
    image = PIL.Image.open(request.FILES["image"]) 
    image.save(SOME_PATH+name) 
    return rc.ALL_OK 

La deuxième suggestion est de définir un modèle d'image et une forme Imageform, et les utiliser:

def create(self, request, nickname): 
    form = ImageForm(request.POST, request.FILES) 
    if form.is_valid(): 
     Image.objects.create(image=form.cleaned_data['image']) 
     return rc.ALL_OK 
    return rc.BAD_REQUEST 

ATTENTION: Je n'ai pas testé l'une de ces méthodes!