2012-02-13 2 views
3

Je fais un téléchargement de fichier POST API demande à l'interface django app REST. Cette demande est faite à partir d'une autre vue de l'application django qui reçoit le fichier du formulaire. J'utilise le module d'affichageDjango request.FILES est vide

image = request.FILES['image'] 
from utils.poster.encode import multipart_encode 
from utils.poster.streaminghttp import register_openers 
register_openers() 
datagen, headers = multipart_encode({'file':image.read()}) 
response = urlfetch.fetch(url="url", 
      payload=datagen, 
      method=urlfetch.POST, 
      headers=headers) 

Ai-je manquant des en-têtes? Comment django traite-t-il une requête avec multipart/form-data? C'est l'erreur que je reçois.

multipart_yielder instance has no attribute '__len__' 

Répondre

3

La fonction UrlFetch de GAE ne peut pas utiliser la sortie retournée par multipart_encode() pour les données utiles. UrlFetch.fetch exécute len() sur la charge utile et la charge utile renvoyée par multipart_encode est un générateur Python qui, en général, ne prend pas en charge len(). La solution consiste à créer une chaîne de charge utile en premier, mais elle utilisera beaucoup de mémoire pour les fichiers volumineux.

datagen, headers = multipart_encode({'file':image.read()}) 
data = str().join(datagen)  
response = urlfetch.fetch(url="url", 
     payload=data , 
     method=urlfetch.POST, 
     headers=headers) 

Problème signalé here.

Questions connexes