Envoie de fichier encodé en URLEncode

Envoie de fichier encodé en URLEncode - Java - Programmation

Marsh Posté le 07-03-2007 à 13:04:22    

Bonjour,
 
je voudrais transmettre un fichier binaire (en fait une video ou un fichier son) sous forme d'un string d'une application Java à une application PHP.
J'ai pensé le faire en l'encodant dans l'application java avec :
 
URLEncoder.encode(new String(buffer,0,nbChar), "UTF-8" ).getBytes("UTF-8" );
 
Qui se trouve dans une boucle while lisant pas par pas le fichier en question.
 
Dans mon php je le recuperes avec :  
 
$uploadedFile =  utf8_decode(urldecode($_POST['uploadedFile']));
 
Autant avec des fichiers de texte ça marche super bien, autant avec un petit mp3 (~2.5 Mo) ça plante. Est-ce que qqn pourrait m'expliquer pourquoi?  
Ou alors me donner une meilleure méthode de transférer ça?
 
Merci beaucoup


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
Reply

Marsh Posté le 07-03-2007 à 13:04:22   

Reply

Marsh Posté le 07-03-2007 à 13:14:30    

ça plante comment ?
 
et pourquoi pas un tableau de bytes?


---------------
HFR - Mes sujets pour Chrome - Firefox - vérifie les nouveaux posts des topics suivis/favoris
Reply

Marsh Posté le 07-03-2007 à 13:34:44    

Salut,
Donc quand je dis "ça plante" c'est que le md5 du fichier avant transfert n'est pas le même que celui après le transfert.
 
Quand tu dis "un tableau de bytes" à quoi penses tu? Parce que là je prend le tableau de bytes et je l'encode juste pour être sur qu'il n'y aura pas de problèmes avec des caractères spéciaux.
 
Merci beaucoup

Reply

Marsh Posté le 07-03-2007 à 13:48:48    

oui, j'ai probablement dit une connerie.
 


---------------
HFR - Mes sujets pour Chrome - Firefox - vérifie les nouveaux posts des topics suivis/favoris
Reply

Marsh Posté le 07-03-2007 à 14:04:39    

Quitte à faire de l'envoi de binaire par HTTP fait un encodage en Base 64. Par contre ça augmentera le volume d'information à transferer d'envion 1/3

Reply

Marsh Posté le 07-03-2007 à 14:25:59    

J'ai aussi testé mais le résultat à l'arrivée est php n'arrive pas a le décoder (base64_décode retourne false)
Et si je décode avec ruby il y arrive mais il manque des caractères...  
Voilà tout monde code au cas où :
 

Code :
  1. FileInputStream stream = new FileInputStream(uploadFile);
  2.   // On cree la connection
  3.   HttpURLConnection connection = createConnection();
  4.   // On recupere le stream d'ecriture
  5.   OutputStream out = connection.getOutputStream();
  6. out.write("uploadedFile=".getBytes("UTF-8" ));
  7.   // Le nombre de caractères lu dans le stream
  8.   int nbChar;
  9.   // Les caracteres lus
  10.   byte[] buffer = new byte[200];
  11.   byte[] base64;
  12.   while((nbChar = stream.read(buffer)) > 0)  {
  13.          
  14.   base64 = Base64.encodeBase64(new String(buffer,0,nbChar).getBytes());
  15.   out.write(base64);
  16.   }
  17.   out.close();
  18.   System.out.println("Le fichier \"" + uploadFile.getAbsolutePath() + "\" a été envoyé au serveur." );
  19.   getServerAnswer(connection);


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
Reply

Marsh Posté le 07-03-2007 à 14:30:18    

out.flush() avant le out.close() peut -être

Reply

Marsh Posté le 07-03-2007 à 14:32:49    

Pareil :(
 
J'ai trouvé ce sujet : http://forum.java.sun.com/thread.j [...] dID=226413
 
Où qqn semble avoir un peu le même besoin que moi mais je vois pas vraiment de différence flagrante entre sa version et la mienne ..

Reply

Marsh Posté le 07-03-2007 à 14:34:11    

sinon
new String(buffer,0,nbChar).getBytes());
est faux car tu lis du binaire que tu transforme en string pour récupérer du binaire.

Reply

Marsh Posté le 07-03-2007 à 14:53:19    

J'ai essayé en l'enlevant et ça marche toujours pas.  
Par contre j'ai remarqué quelque chose que je comprend pas. Si je change la taille du buffer, ce que reçoit mon script php change aussi ... Comment ça s'explique?

Reply

Marsh Posté le 07-03-2007 à 14:53:19   

Reply

Marsh Posté le 07-03-2007 à 16:49:39    

euh pourquoi par URL avec un POST ou PUT ce serai pas mieux ?
 
(par url en plus je crois qu'il y a une taille max à pas depasser !!!!)
 
 Jakarta Commons HttpClient peut éventuellement t'aider


Message édité par cooltwan le 07-03-2007 à 16:56:35
Reply

Marsh Posté le 07-03-2007 à 17:01:54    

Hello,
 
Je viens de trouver mon bonheur :  
http://www.devx.com/Java/Article/17679/1954?pf=true
 
Merci à son auteur qui non seulement est compétent mais en plus laisse ses scripts libre :jap:

Reply

Marsh Posté le 08-03-2007 à 15:05:20    

J'ai pas accès d'ici vers ton lien, mais je dirai comme ca que ton encodage 64, tu le fais sur le tableau de bytes et pas sur une String créée à partir de ce byte[].
En principe comme c normalisé, tu pourras utiliser sans problème des données en base64 quel que soit le système sur lequel tu l'utilises.
 


---------------
Voir les RAW sous Android: https://market.android.com/details? [...] .RawVision Blog Photo: http://photouch.me Applications mobiles: http://caketuzz.com Wapcam Project: http://wapcam.mobi
Reply

Marsh Posté le 08-03-2007 à 17:23:42    

Salut,
 
En fait "mon lien" permet d'envoyer un fichier par http en emulant un simple formulaire html ... Quand je suis tombé sur le lien j'étais en train d'écrire une classe qui faisait exactement ça :D Heureusement je l'ai trouvé ,parce qu'en plus sa classe est bien plus clean que la mienne :D

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed