Upload d'un fichier
Résolu
natasha82
Messages postés
73
Statut
Membre
-
natasha82 Messages postés 73 Statut Membre -
natasha82 Messages postés 73 Statut Membre -
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
et aussi la page jsp:
pouvez vous m'aidez svp.merci
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:

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:
- Upload d'un fichier
- Fichier bin - Guide
- Comment réduire la taille d'un fichier - Guide
- Comment ouvrir un fichier epub ? - Guide
- Fichier rar - Guide
- Fichier .dat - Guide
3 réponses
Bonjour,
Tu pourrais chercher un petit peu avant de poser ta question sur le forum.
Le message d'erreur dit :
Ce qui signifie dans ton doGet, ligne 40, de DownloadServlet, c'est à dire sur ce code :
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.
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 }
j'ai fait ce que vous m'avez donner il m'a retourner une page blanche.
Si tu ne fais rien effectivement ce sera une page blanche, si tu fais un 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).
2) Tu passes à la requête le paramètre manquant pour qu'il soit pris en compte.
http://monsite/mapage?idTemp=42