IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Android Discussion :

Upload fichier zip To webservice


Sujet :

Android

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    ETUDIANT
    Inscrit en
    Novembre 2012
    Messages
    111
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : ETUDIANT

    Informations forums :
    Inscription : Novembre 2012
    Messages : 111
    Par défaut Upload fichier zip To webservice
    Bonjour a tous ,

    Je souhaite d'envoyer un fichier "zip" depuis un appareil Android vers mon application Web s'exécutant sur un serveur avec tomcat

    Android :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    File fl = new File(Environment.getExternalStorageDirectory() + "/test/zer.zip")
     
    URL url =new URL("http://xxx.xxx.x.xx:8080/test/zs/zipFile");  // test en local
    					HttpURLConnection conn = (HttpURLConnection) url.openConnection();
    					conn.setRequestMethod("POST");
    					conn.setRequestProperty("Content-type", "application/zip");
    				    conn.setRequestProperty("Transfer-Encoding", "chunked" );
    					conn.setChunkedStreamingMode(4096);
    					conn.setDoInput(true); 
    					conn.setDoOutput(true);
    					conn.setConnectTimeout(50000);
    					..........
    Mais le problème, je ne sais comment attacher le fichier zer.zip ?? avec outputStream.write ??

    Merci d'avance

  2. #2
    Membre chevronné
    Homme Profil pro
    Architecte technique
    Inscrit en
    Mai 2020
    Messages
    342
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Architecte technique

    Informations forums :
    Inscription : Mai 2020
    Messages : 342
    Par défaut
    Citation Envoyé par brayanrabat Voir le message
    avec outputStream.write ??
    Oui. Mais vous voulez faire un upload en morceaux/chunck. Il vous faudra lire un peu de specs pour que cet upload soit effectué correctement et compris par le serveur.

  3. #3
    Membre confirmé
    Homme Profil pro
    ETUDIANT
    Inscrit en
    Novembre 2012
    Messages
    111
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : ETUDIANT

    Informations forums :
    Inscription : Novembre 2012
    Messages : 111
    Par défaut
    Bonjour ,
    Merci pour votre réponse .

    coté client (android) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
     
    File zipfile = new File(Environment.getExternalStorageDirectory() + "/temp/azw.zip");
     
    URL url =new URL("http://xxx.xxx.x.xx:8080/test/wy/zipFile");// LocalHost  
    HttpURLConnection conn = (HttpURLConnection) url.openConnection();
    conn.setRequestMethod("POST");
    conn.setRequestProperty("Content-type", "application/zip");
    conn.setDoInput(true); 
    conn.setDoOutput(true);
    conn.setConnectTimeout(50000);
    BufferedOutputStream sout = new BufferedOutputStream(conn.getOutputStream());
    FileInputStream bis = new FileInputStream(zipfile);
    int i;    
    byte bytes[]=new byte[4096]; 
    while((i=bis.read(bytes))!=-1){
    				        sout.write(bytes,0,i);
    				        sout.flush();
    	         			}  
     
    sout.close();
    bis.close();
    coté serveur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    @patch("wy")
    public class test{
    ......
    ......
     
    @POST
    @patch("zipFile")
    @produces({ Media.Type.APPLICATION_OCTET_STREAM })
    public void zipFile(){
    ??????
    //le code pour recuperer ce zip ? et le mettre par exemple : c:/data/
     
    }
    }
    Merci d'avance

  4. #4
    Membre chevronné
    Homme Profil pro
    Architecte technique
    Inscrit en
    Mai 2020
    Messages
    342
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Architecte technique

    Informations forums :
    Inscription : Mai 2020
    Messages : 342
    Par défaut
    Le plus standard serait sûrement de faire un multi-part avec une librairie Android, l'implémentation côté serveur dépendra du framework que vous utilisez:
    - Pour Spring ça semble assez simple avec un paramètre de type MultipartFile: https://spring.io/guides/gs/uploading-files/
    - Pour du "pur" Servlet il me semble que commons-fileupload était la solution al plus courante: http://commons.apache.org/proper/commons-fileupload/

    Sinon, si vous gardez votre client Android tel quel, il vous suffit de préciser la taille du zip dans les headers de la requête et, côté de serveur de lire le même nombre de bytes depuis le stream de la requête. Mais si le fichier est volumineux cela va prendre du temps et dans certaines infrastructure, ces requêtes sont coupées avant d'avoir eu le temps de tout envoyer.

  5. #5
    Membre confirmé
    Homme Profil pro
    ETUDIANT
    Inscrit en
    Novembre 2012
    Messages
    111
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : ETUDIANT

    Informations forums :
    Inscription : Novembre 2012
    Messages : 111
    Par défaut
    Rebonjour ,

    La taille du fichier zip , maxi = 25 mo , mais il faudra faire des tests , mais mnt je sais le code(web services REST) , pour le but de dowloawd ce fichier zip , et aprés l'envoyer à ce client ?

  6. #6
    Membre chevronné
    Homme Profil pro
    Architecte technique
    Inscrit en
    Mai 2020
    Messages
    342
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Architecte technique

    Informations forums :
    Inscription : Mai 2020
    Messages : 342
    Par défaut
    Excusez-moi, je n'ai pas compris votre dernière question.

  7. #7
    Membre chevronné
    Homme Profil pro
    Architecte technique
    Inscrit en
    Mai 2020
    Messages
    342
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Architecte technique

    Informations forums :
    Inscription : Mai 2020
    Messages : 342
    Par défaut
    Comme je vous le suggérait un peu plus tôt:
    Citation Envoyé par gervais.b Voir le message
    Le plus standard serait sûrement de faire un multi-part avec une librairie Android, l'implémentation côté serveur dépendra du framework que vous utilisez:
    - Pour Spring ça semble assez simple avec un paramètre de type MultipartFile: https://spring.io/guides/gs/uploading-files/
    - Pour du "pur" Servlet il me semble que commons-fileupload était la solution al plus courante: http://commons.apache.org/proper/commons-fileupload/

    Sinon, si vous gardez votre client Android tel quel, il vous suffit de préciser la taille du zip dans les headers de la requête et, côté de serveur de lire le même nombre de bytes depuis le stream de la requête. Mais si le fichier est volumineux cela va prendre du temps et dans certaines infrastructure, ces requêtes sont coupées avant d'avoir eu le temps de tout envoyer.


    Etant donné, que "cote android : OK" vous êtes dans ma seconde suggestion. Il vous reste à obtenir un InputStream sur le corps de la requête entrante.

    Dans l'api javax.servlet il y à la méthode HttpServletRequest#getInputStream() .

    L'idée serait donc que votre client Android précise la taille du fichier Zip via le header Content-Length. De cette façon, le serveur sait combien d'octets il doit lire.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    // Avec "CountingInputStream" qui compte les octets lus
    // Avec "getInput()" qui retourne un InputStream sur le corps de la requête
    // Avec "body" qui permet d'accumuler ou écrire les octets lus.
    CountingInputStream counter = new CountingInputStream(getInput());
    int length = Integer.parseInt(headers.getValue(CONTENT_LENGTH));
    while ( counter.getByteCount() <= length ) {
        body.append(counter.read());
    }

    https://www.w3.org/Protocols/rfc2616...html#sec14.13v

  8. #8
    Membre confirmé
    Homme Profil pro
    ETUDIANT
    Inscrit en
    Novembre 2012
    Messages
    111
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : ETUDIANT

    Informations forums :
    Inscription : Novembre 2012
    Messages : 111
    Par défaut
    Merci infiniment pour votre réponse , il me reste coté serveur , je sais pas le code à écrire pour recuperer ce fichier ?

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. AngularJs upload fichier zip controleur
    Par Invité dans le forum AngularJS
    Réponses: 2
    Dernier message: 01/06/2016, 09h32
  2. WCF Upload fichier vers webservice
    Par bibeuz dans le forum Services Web
    Réponses: 1
    Dernier message: 17/07/2013, 15h25
  3. [1.x] upload un fichier zip et le decompresser
    Par bozeclair dans le forum Symfony
    Réponses: 2
    Dernier message: 01/12/2011, 17h35
  4. Webservice, interogation fichier zip
    Par dIwAmIb dans le forum Services Web
    Réponses: 2
    Dernier message: 01/04/2009, 16h14
  5. Réponses: 8
    Dernier message: 24/11/2008, 13h29

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo