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

Servlets/JSP Java Discussion :

Télécharger un document via une servlet


Sujet :

Servlets/JSP Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Avatar de stc074
    Homme Profil pro
    Codeur du dimanche
    Inscrit en
    Janvier 2009
    Messages
    1 015
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Lozère (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Codeur du dimanche

    Informations forums :
    Inscription : Janvier 2009
    Messages : 1 015
    Billets dans le blog
    1
    Par défaut Télécharger un document via une servlet
    Bonjour j'essaie de telecharger un document via une servlet, j'ai pris un code trouvé sur ce site mais cela ne fonctionne pas :
    Ma servlet :
    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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
       @Override
        protected void doGet(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
            if(request.getParameter("idMessage")!=null) {
                Membre membre=new Membre();
                membre.testConnecte(request);
                long idMembre=membre.getId();
                if(idMembre!=0) {
                    long idMessage=Long.parseLong(request.getParameter("idMessage"));
                    Document document=new Document();
                    document.initDL(idMessage, idMembre);
                    if(document.getIdMessage()!=0) {
                        String filename=Datas.DIR+"documents/"+document.getIdMessage()+document.getExtension();
                        File file=new File(filename);
                        if(file.exists()) {
                            try {
                                String filenameDL="doc-"+document.getIdMessage()+document.getExtension();
                                ServletOutputStream out = response.getOutputStream();
                                BufferedInputStream from = null;
                                response.setContentLength((int) file.length());
                                int bufferSize = 64 * 1024;
                                from = new BufferedInputStream(new FileInputStream(file), bufferSize * 2);
                                byte[] bufferFile = new byte[bufferSize];
                                response.setContentType("application/download");
                                response.setHeader("Content-Disposition", "attachment;filename=\"" + filenameDL + "\"");
                                for (int i = 0; ; i++) {
                                    int len = from.read(bufferFile);
                                        if (len < 0)
                                            break;
                                    out.write(bufferFile, 0, len);
                                }
                                out.flush();
                                from.close();
                                out.close();
                            } catch(Exception e) {
                                response.setContentType("text/html;charset=UTF-8");
                                PrintWriter out = response.getWriter();
                                out.println("Erreur :"+e.getMessage());
                            }
                        } else {
                            response.setContentType("text/html;charset=UTF-8");
                            PrintWriter out = response.getWriter();
                            out.println("Erreur : fichier inconnu!");
                        }
                    }
                } else {
                        response.setContentType("text/html;charset=UTF-8");
                        PrintWriter out = response.getWriter();
                        out.println("Erreur : document inconnu!");
                }
            } else {
                    response.setContentType("text/html;charset=UTF-8");
                    PrintWriter out = response.getWriter();
                    out.println("Erreur !");
            }
        }
    par exemple pour un fichier pdf on me propose de le visionner mais le visionneur donne une erreur et la taille du pdf fait 0 octet.
    Je ne vois pas d'où provient mon erreur.
    Merci de votre aide.

  2. #2
    Modérateur
    Avatar de dinobogan
    Homme Profil pro
    ingénieur
    Inscrit en
    Juin 2007
    Messages
    4 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : ingénieur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 4 073
    Par défaut
    Si ce n'est pas déjà fait, affiche le chemin du document. Ensuite assure-toi qu'il existe et qu'il est correctement ouvert par ta visionneuse PDF avant de remettre en cause le code.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java
    Que la force de la puissance soit avec le courage de ta sagesse.

  3. #3
    Membre éprouvé
    Avatar de stc074
    Homme Profil pro
    Codeur du dimanche
    Inscrit en
    Janvier 2009
    Messages
    1 015
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Lozère (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Codeur du dimanche

    Informations forums :
    Inscription : Janvier 2009
    Messages : 1 015
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par dinobogan Voir le message
    Si ce n'est pas déjà fait, affiche le chemin du document. Ensuite assure-toi qu'il existe et qu'il est correctement ouvert par ta visionneuse PDF avant de remettre en cause le code.
    le fichier existe vu que je fait le test if(file.exists()) { ...

  4. #4
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2011
    Messages : 27
    Par défaut
    J'ai le même objectif que toi.

    Tomcat : apache-tomcat-6.0.32

    J'utilise une GenericServlet étant donné que quand j'utilise une HttpServlet, j'ai l'erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    La méthode HTTP spécifiée n'est pas autorisée pour la ressource demandée (La méthode HTTP POST n''est pas supportée par cette URL).
    J'imagine qu'il me manque un jar, à tomcat, j'ai bien ajouté javax.servlet.jar dans apache-tomcat-6.0.32\webapps\ROOT\WEB-INF\lib

    Voici l'erreur que j'obtiens donc avec la GenericServlet :

    java.io.IOException: Invalid header signature; read 0x352E312D46445025, expected 0xE11AB1A1E011CFD0
    Voici le code de ma Servlet.
    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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    package servlet;
     
    import java.io.ByteArrayOutputStream;
    import java.io.FileInputStream;
    import java.io.IOException;
    import java.io.OutputStream;
    import java.io.PrintWriter;
     
    import javax.servlet.GenericServlet;
    import javax.servlet.ServletException;
    import javax.servlet.ServletRequest;
    import javax.servlet.ServletResponse;
     
    import org.apache.poi.hssf.usermodel.HSSFWorkbook;
     
    public class Download extends GenericServlet {
    	private static final long serialVersionUID = 1L;
     
        @Override
    	public void service(ServletRequest request, ServletResponse response)
    			throws ServletException, IOException {
     
        	FileInputStream fileInputStream = new FileInputStream("C:\\test.pdf");
     
        	ByteArrayOutputStream baos = new ByteArrayOutputStream(1024);
     
    	HSSFWorkbook wb = new HSSFWorkbook(fileInputStream);
     
    	wb.write(baos);
     
    	byte[] bytes = baos.toByteArray();
     
    	String tab = bytes.toString();
     
        	OutputStream stream = response.getOutputStream();
     
        	response.setContentType("application/pdf");
        	response.setBufferSize(tab.length());
     
        	PrintWriter flux = new PrintWriter(stream);
        	flux.append(tab);
        	flux.flush();
        	flux.close();
    	}
    }

Discussions similaires

  1. tableau d'images affichées via une servlet
    Par lemfi dans le forum Servlets/JSP
    Réponses: 4
    Dernier message: 29/08/2008, 08h45
  2. Transfert incomplet de fichier via une servlet
    Par benjamin_musique dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 12/11/2007, 14h55
  3. Connexion à une base MySQL via une Servlet
    Par maxinformatique dans le forum Servlets/JSP
    Réponses: 6
    Dernier message: 25/05/2007, 15h18
  4. [Servlet] Ouvrir un popup via une servlet.
    Par Dukedoom dans le forum Servlets/JSP
    Réponses: 8
    Dernier message: 11/07/2006, 15h15
  5. [JAVA] Probleme de connexion a ACCESS via une Servlet.
    Par rider4ever dans le forum Access
    Réponses: 8
    Dernier message: 10/02/2006, 18h45

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