Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1379 connectés 

  FORUM HardWare.fr
  Programmation
  Java

  Envoie de fichier encodé en URLEncode

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Envoie de fichier encodé en URLEncode

n°1525152
esox_ch
Posté le 07-03-2007 à 13:04:22  profilanswer
 

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
mood
Publicité
Posté le 07-03-2007 à 13:04:22  profilanswer
 

n°1525158
brisssou
8-/
Posté le 07-03-2007 à 13:14:30  profilanswer
 

ç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
n°1525168
esox_ch
Posté le 07-03-2007 à 13:34:44  profilanswer
 

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

n°1525180
brisssou
8-/
Posté le 07-03-2007 à 13:48:48  profilanswer
 

oui, j'ai probablement dit une connerie.
 


---------------
HFR - Mes sujets pour Chrome - Firefox - vérifie les nouveaux posts des topics suivis/favoris
n°1525199
phnatomass
Je m'empare de ton esprit !!
Posté le 07-03-2007 à 14:04:39  profilanswer
 

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

n°1525225
esox_ch
Posté le 07-03-2007 à 14:25:59  profilanswer
 

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
n°1525229
phnatomass
Je m'empare de ton esprit !!
Posté le 07-03-2007 à 14:30:18  profilanswer
 

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

n°1525231
esox_ch
Posté le 07-03-2007 à 14:32:49  profilanswer
 

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 ..

n°1525234
phnatomass
Je m'empare de ton esprit !!
Posté le 07-03-2007 à 14:34:11  profilanswer
 

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.

n°1525261
esox_ch
Posté le 07-03-2007 à 14:53:19  profilanswer
 

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?

mood
Publicité
Posté le 07-03-2007 à 14:53:19  profilanswer
 

n°1525416
cooltwan
Posté le 07-03-2007 à 16:49:39  profilanswer
 

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
n°1525420
esox_ch
Posté le 07-03-2007 à 17:01:54  profilanswer
 

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:

n°1525845
wapcamer
Posté le 08-03-2007 à 15:05:20  profilanswer
 

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
n°1525964
esox_ch
Posté le 08-03-2007 à 17:23:42  profilanswer
 

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


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Java

  Envoie de fichier encodé en URLEncode

 

Sujets relatifs
Récupération d'n fichier par FTPfichier en vb
fusion de fichierfopen | 255 caractères | fichier csv avec chaines sup
Téléchargement de fichier et redirectioninclure un fichier JS avec des paramètres
creation de fichier texte en c++Fichier XML et typage de données
[PHP] problème lecture / écriture dans un fichierouvrir un fichier sur un lecteur réseau en php
Plus de sujets relatifs à : Envoie de fichier encodé en URLEncode


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR