2010-09-25 3 views
0

Mon affichage Django génère un PDF via pycairo en réponse à un POST (je ne redirige pas en réponse à la POST). Lorsque je POST utilise des navigateurs de bureau, je peux enregistrer et/ou visualiser le PDF en utilisant Adobe Reader ou Document Viewer. Toutefois, lorsque je POST via mes navigateurs android, les lecteurs Adobe PDF Reader et ThinkFree signalent tous les deux que le fichier est corrompu.PDF en réponse aux navigateurs POST - android effectuent GET supplémentaire et enregistrer en tant que fichier

regardant dans les fichiers journaux sur mon serveur d'applications les deux navigateurs Android envoient un POST suivi immédiatement par un GET pour la même page:

[24/Sep/2010:22:49:20 -0500] "POST /courses/blank/create/ HTTP/1.1" 200 8895 "http://example.com/create/" "Mozilla/5.0 (Linux; U; Android 2.1-update1; en-us; SPH-D700 Build/ECLAIR) AppleWebKit/530.17 (KHTML, like Gecko) Version/4.0 Mobile Safari/530.17" 

[24/Sep/2010:22:49:20 -0500] "GET /courses/blank/create/ HTTP/1.1" 200 9432 "-" "Mozilla/5.0 (Linux; U; Android 2.1-update1; en-us; SPH-D700 Build/ECLAIR) AppleWebKit/530.17 (KHTML, like Gecko) Version/4.0 Mobile Safari/530.17" 

Quand je regarde le fichier enregistré sur le téléphone, il est le HTML la requête GET.

est ici un squelette de la vue:

def create(request, template="blankgrids/create.html"): 
    if request.method == 'POST': 
     form = BlankGridForm(request.POST) 
     if form.is_valid(): 
      response = HttpResponse(mimetype='application/pdf') 
      response['Content-Disposition'] = 'attachment; filename=example.pdf' 
      # snipped pycairo code that writes directly into response 
      return response 
    else: 
     form = BlankGridForm() 

    return render_to_response(template, 
          {'form': form}, 
          context_instance=RequestContext(request)) 

Je me demande ce qui pourrait être à l'origine des navigateurs Android pour effectuer l'EEG?

Répondre

0

Je ne sais pas ce que fait le GET, mais vous ne pourrez peut-être pas changer son comportement. Vous pouvez modifier votre code afin que le POST renvoie une redirection vers un fichier GET pour le fichier PDF. Si vous avez des données dans le POST nécessaire pour créer le PDF, vous pouvez le stocker dans la session ou l'ajouter en tant que paramètres d'URL, éventuellement avec un jeton de sécurité pour empêcher les replays et ainsi de suite.

+0

Ned - Merci pour la suggestion. Dans ce site, les fichiers PDF générés peuvent être partagés et non régénérés. Donc, je pensais à avoir le contrôle POST si le PDF existe. Sinon, il le génère sur le disque. Dans tous les cas, le POST redirige vers une URL permanente pour le fichier PDF. Cela permet un bookmarking par les utilisateurs et la mise en cache par le serveur Web. C'est bizarre que ces navigateurs mobiles aient ce comportement ... – saschwarz

+0

Sons parfaits. –

Questions connexes