Upload n'accepte pas les fihcier volumineux

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 Whismeril le 30/04/2015 à 21:09
natasha82 Messages postés 55 Date d'inscription vendredi 20 mars 2015 Statut Membre Dernière intervention 9 juin 2015 - 1 mai 2015 à 12:51
Bonjour
svp aidez moi c'est urgent
j'ai fait un programme qui fait le chargement d'un fichier mais il n'accepte pas les pdf il m'affiche,
cette exception:
com.mysql.jdbc.MysqlDataTruncation: Data truncation: Data too long for column 'file' at row 1

voici la table cours cours(id,title,file)
ce "file" représente le chemin a vrai dire url
sachant sur la colonne file de la base de donné g mis varchar 45
voici le code

package Servlet;

import com.sun.corba.se.spi.protocol.RequestDispatcherDefault;
import java.io.IOException;
import java.io.InputStream;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.Statement;
import java.util.Random;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.MultipartConfig;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.Part;


@WebServlet("/uploadServlet")
@MultipartConfig (maxFileSize=999999999)
 
public class UploadController extends HttpServlet {
 
    
            
     
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
       response.setContentType("text/html;charset=UTF-8");
        
                
          
       PrintWriter out = response.getWriter() ;
       
       InputStream inputStream=null;
     
       String Title= request.getParameter("title");
       Part filePart=request.getPart("file_upload");
       if(filePart!=null)
       {
      
       
       System.out.println(filePart.getName());
        System.out.println(filePart.getSize());
       System.out.println( filePart.getContentType());
       
       inputStream =filePart.getInputStream();
      
       }
        try {
            
            Class.forName("com.mysql.jdbc.Driver");
         
            Connection cn=DriverManager.getConnection("jdbc:mysql://localhost:3306/bdd","root","");
            
            String sql="INSERT INTO cours VALUES(Null,?,?)";
            PreparedStatement st= cn.prepareStatement(sql);
    
            
         st.setString(1, Title);
          
         
         if(inputStream != null){
         
         st.setBinaryStream(2, inputStream, (int) filePart.getSize());
         
        
         }
     
         
         int row = st.executeUpdate();
         if(row>0){
         out.println("file upload");
         cn.close();
             RequestDispatcher rs=request.getRequestDispatcher("UploadFiles.jsp");
             rs.include(request, response);
         
         }
         else{
         
         out.println("on peux pa");
         cn.close();
         RequestDispatcher rs=request.getRequestDispatcher("UploadFiles.jsp");
             rs.include(request, response);
         
         }
         
         
       
        }
       catch (Exception ex) {
             ex.printStackTrace();
        }
       
       
       
       
    }

     
}





merci

EDIT: Précision du langage dans la coloration syntaxique.

1 réponse

ElementW Messages postés 4816 Date d'inscription dimanche 12 juin 2011 Statut Contributeur Dernière intervention 5 octobre 2021 1 225
1 mai 2015 à 12:48
'lut, le problème n'est pas spécifique aux PDFs.
Le problème est que tu stockes des fichiers dans une BDD, et ça ne se fait pas: les BDDs ne sont pas conçues pour ça!
Il faut mettre tes fichiers autre part, et stocker dans la BDD uniquement leur chemin d'accès, c'est ce que tu crois faire, mais ce n'est pas le cas:
st.setBinaryStream(2, inputStream, (int) filePart.getSize());

Ce code prends les données du fichier et les insère...
De plus un VARCHAR(45), c'est trop court pour certains chemins. Il faut prendre plus long, au moins 512 caractères pour ne pas avoir d'ennuis.
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:51
le problème etait sur le type fu file il fallait mettre "longblob"
0