Upload d'un fichier

Résolu/Fermé
natasha82 Messages postés 55 Date d'inscription vendredi 20 mars 2015 Statut Membre Dernière intervention 9 juin 2015 - Modifié par KX le 1/05/2015 à 20:51
natasha82 Messages postés 55 Date d'inscription vendredi 20 mars 2015 Statut Membre Dernière intervention 9 juin 2015 - 1 mai 2015 à 22:53
bonjour,
j'ai fait un programme qui permet de télécharger un fichier a partir de la base de donnée ;mais quand je clique sur le bouton télécharger j'ai cette exception:
tton telecharger

voici le code

 
package Servlet;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.sql.Blob;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
 
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
 
@WebServlet("/downloadFileServlet")
public class DownloadServlet extends HttpServlet {
 
    // size of byte buffer to send file
    private static final int BUFFER_SIZE = 4096;   
     
    // database connection settings
    private String dbURL = "jdbc:mysql://localhost:3306/bdd";
    private String dbUser = "root";
    private String dbPass = "";
     
    protected void doGet(HttpServletRequest request,
            HttpServletResponse response) throws ServletException, IOException {
        // get upload id from URL's parameters
        int uploadId = Integer.parseInt(request.getParameter("idTemp"));
         
        Connection conn = null; // connection to the database
         
        try {
            // connects to the database
            DriverManager.registerDriver(new com.mysql.jdbc.Driver());
            conn = DriverManager.getConnection(dbURL, dbUser, dbPass);
 
            // queries the database
            String sql = "SELECT * FROM cours WHERE idTemp = ?";
            PreparedStatement statement = conn.prepareStatement(sql);
            statement.setInt(1, uploadId);
 
            ResultSet result = statement.executeQuery();
            if (result.next()) {
                // gets file name and file blob data
                String fileName = result.getString("title");
                Blob blob = result.getBlob("file");
                InputStream inputStream = blob.getBinaryStream();
                int fileLength = inputStream.available();
                 
                System.out.println("fileLength = " + fileLength);
 
                ServletContext context = getServletContext();
 
                // sets MIME type for the file download
                String mimeType = context.getMimeType(fileName);
                if (mimeType == null) {        
                    mimeType = "application/octet-stream";
                }              
                 
                // set content properties and header attributes for the response
                response.setContentType(mimeType);
                response.setContentLength(fileLength);
                String headerKey = "Content-Disposition";
                String headerValue = String.format("attachment; filename=\"%s\"", fileName);
                response.setHeader(headerKey, headerValue);
 
                // writes the file to the client
                OutputStream outStream = response.getOutputStream();
                 
                byte[] buffer = new byte[BUFFER_SIZE];
                int bytesRead = -1;
                 
                while ((bytesRead = inputStream.read(buffer)) != -1) {
                    outStream.write(buffer, 0, bytesRead);
                }
                 
                inputStream.close();
                outStream.close();             
            } else {
                // no file found
                response.getWriter().print("File not found for the id: " + uploadId);  
            }
        } catch (SQLException ex) {
            ex.printStackTrace();
            response.getWriter().print("SQL Error: " + ex.getMessage());
        } catch (IOException ex) {
            ex.printStackTrace();
            response.getWriter().print("IO Error: " + ex.getMessage());
        } finally {
            if (conn != null) {
                // closes the database connection
                try {
                    conn.close();
                } catch (SQLException ex) {
                    ex.printStackTrace();
                }
            }          
        }
    }
}


et aussi la page jsp:


<%@page import="java.sql.ResultSet"%>
<%@page import="java.sql.Statement"%>
<%@page import="java.sql.DriverManager"%>
<%@page import="java.sql.Connection"%>
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>telechargement du cours</title>
    </head>
    <body>
        
        
        
        <br><br>
        <table border="1" width="254" cellpadding="5"/>
        <thead><th colspan="3"> Download      </th> 
</thead>
<tbody>
    <tr>
        <td>
<center><b>id</b></center><td>
<center><b>title</b></center></td>
<td><center><b>file</b></center>
        </td>
        
        
        
    </tr>
    
    <% 
         Class.forName("com.mysql.jdbc.Driver");
         
            Connection cn=DriverManager.getConnection("jdbc:mysql://localhost:3306/bdd","root","");
            
            String sql2="SELECT * FROM cours";
            Statement st=cn.createStatement();
            ResultSet rs= st.executeQuery(sql2);
            
            
            if(!rs.isBeforeFirst())
                
                
                
            {
                
            
            %>
            <tr>
                
                <td colspan="3"><center><% out.print("no file");%></center></td>
        </tr>
        <%
           }
           while(rs.next())   
{
    %>
    <tr>
        
        <td><center><% out.print(rs.getString("idTemp"));%>
           <td><center><% out.print(rs.getString("title"));%>  
               <form action="Download" method="GET">
                              
                                  
             
             
             <td> <input type="submit" value="Telecharger"</td>
          </form
               
        
        
    </tr> 
    <%}
           %>
                
                
                
             
    
</tbody>
</table>
           <% rs.close();
           st.close();
         cn.close();
         %>
    </body>
</html>




pouvez vous m'aidez svp.merci
A voir également:

3 réponses

KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 3 015
1 mai 2015 à 12:17
Bonjour,

Tu pourrais chercher un petit peu avant de poser ta question sur le forum.

Le message d'erreur dit :

NumberFormatException: null
    java.lang.Integer.parseInt
    Servlet.DownloadServlet.doGet(DownloadServlet.java:40) 

Ce qui signifie dans ton doGet, ligne 40, de DownloadServlet, c'est à dire sur ce code :
Integer.parseInt(request.getParameter("idTemp"));
tu as dans la méthode parseInt, un paramètre qui est null, qui ne peut pas être converti en nombre.

C'est finalement le même problème que dans tes autres questions, tu dois vérifier que les paramètres de la requête existent avant de commencer le traitement.

String idTemp=request.getParameter("idTemp");
if (idTemp==null) {
    // j'envoie un message d'erreur, il manque une donnée
    return; // je ne fais pas la suite, ça ne sert à rien
}
1
natasha82 Messages postés 55 Date d'inscription vendredi 20 mars 2015 Statut Membre Dernière intervention 9 juin 2015
1 mai 2015 à 12:39
Bonjour,
j'ai fait ce que vous m'avez donner il m'a retourner une page blanche.
0
KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 3 015 > natasha82 Messages postés 55 Date d'inscription vendredi 20 mars 2015 Statut Membre Dernière intervention 9 juin 2015
1 mai 2015 à 12:46
Tout dépend ce que tu fais au moment où je dis "j'envoie un message d'erreur".
Si tu ne fais rien effectivement ce sera une page blanche, si tu fais un
response.getWriter().print("idTemp is missing");
pour écrire un message d'erreur, c'est ce message qui apparaîtra.

Tu peux également faire (ce qu'un site normal fait en général) c'est à dire renvoyer vers une page d'erreur (avec un code 400 dans ton cas).
0
natasha82 Messages postés 55 Date d'inscription vendredi 20 mars 2015 Statut Membre Dernière intervention 9 juin 2015
1 mai 2015 à 12:47
comment le resoudre svp.merci
0
KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 3 015 > natasha82 Messages postés 55 Date d'inscription vendredi 20 mars 2015 Statut Membre Dernière intervention 9 juin 2015
1 mai 2015 à 12:53
1) Tu gères le cas d'erreur comme je te l'ai montré
2) Tu passes à la requête le paramètre manquant pour qu'il soit pris en compte.

http://monsite/mapage?idTemp=42
0
natasha82 Messages postés 55 Date d'inscription vendredi 20 mars 2015 Statut Membre Dernière intervention 9 juin 2015
1 mai 2015 à 12:57
la meme chose
0
Whismeril Messages postés 19026 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 20 avril 2024 931
1 mai 2015 à 19:34
Bonsoir, j'ai corrigé la coloration syntaxique, voir ici
0
natasha82 Messages postés 55 Date d'inscription vendredi 20 mars 2015 Statut Membre Dernière intervention 9 juin 2015
1 mai 2015 à 22:53
j'ai réglé le problem: on rajoutant ça au formulaire


<input type="hidden" name="title" value="<%=rs.getString("idTemp") %>"/>

0