2012-11-01 2 views
1

J'essaie d'implémenter une application web en utilisant le framework de jeu en remplacement de l'ancienne implémentation du serveur http qui interface avec l'ancien client http non navigateur.Accès aux données brutes du corps de la requête http

Ce client est écrit en Delphi et publie des données directement dans le corps d'une requête avec des informations d'en-tête à son sujet.

Je pensais que je recevrais quelque chose dans

request.body /* In the play controller */ 

mais rien est là.

Voir le code ci-dessous:

public static void uploadPicture() { 

     InputStream data = request.body; 
    String fx = Play.getFile("").getAbsolutePath()+File.separator+"uploads"+File.separator+"test.jpg"; 
     File f = new File(fx); 
     FileOutputStream moveTo = new FileOutputStream(fx); 
     try { 
       byte[] b = new byte[4096]; 
       for (int x = 0; (data.read(b)) != -1;){ 
        moveTo.write(b, 0, x); 
      } 
     } finally{ 
      moveTo.close(); 
     } 

    } 

EDIT: Pour clarifier mon point: je suis allé et je créé un projet simple Web dynamique dans Eclipse HttpServlet et doPost() méthode quand je reçois le request.getInputStream() qu'il contient le fichier envoyé depuis le client hérité.

Le jeu fait quelque chose pour le corps de la requête !?

Quelles sont mes options?

Merci.

Irfan

+0

Etes-vous sûr que le problème n'est pas ailleurs (c'est-à-dire une mise en œuvre bâclée dans le client hérité)? J'utilise 'request.body' et cela fonctionne comme supposé. – Samuel

+0

@Samuel Certainement l'implémentation sur le client est très simple, il a un nom de fichier dans l'entête et dans le corps c'est un fichier. Je suis allé et ai créé une servlet simple et quand j'obtiens request.getInputStream() et l'enregistre dans le dossier, le dossier est correct. Je suppose que le jeu fait quelque chose à la demande originale ?! –

+1

Ok, c'était un bug dans Play 1.2.4. J'ai installé la dernière version 1.2.5 et tout fonctionne hors de la boîte. Merci ! –

Répondre

1

Ok, ce fut un bug en jeu 1.2.4. J'ai installé la dernière version 1.2.5 et tout fonctionne hors de la boîte.

Vous pouvez accéder au corps brut d'une requête dans request.body dans le contrôleur.