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
Répondre
à peu près. Techniquement, c'est juste un post http.
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.
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)
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!
en dire plus ... – miku
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