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
- 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
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).
2) Tu passes à la requête le paramètre manquant pour qu'il soit pris en compte.
http://monsite/mapage?idTemp=42