Partage
  • Partager sur Facebook
  • Partager sur Twitter

problème de récupération d'un chemin de fichier

7 décembre 2018 à 16:16:36

Bonjour à tous ! Je tente en vain d'enregistrer des images dans une table (table qui je le précise est "isolé", ne stock que les images).

Malheureusement j'obtiens cette erreur : FileNotFoundException (La syntaxe du nom de fichier, de répertoire ou de volume est incorrecte)


Ce que je constate :

Si je remplace new File(logo) par logo = chemin absolue, ca fonctionne. (ligne 19 de "BDD").

logo reçoit "image.png"

Traitement du formulaire

public static final String LOGO					= "logo";
	
	private Map<String, String> erreur = new HashMap<String, String>();
	
	public BeanUtilisateur TraitParamEdition(HttpServletRequest request) {

         try {
			part = request.getPart( LOGO );
			logo = getNomFichier( part );
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (ServletException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		
		if ( logo != null && !logo.isEmpty() ) {
			
			InsertLogo formIL 	= new InsertLogo();
			BeanUtilisateur u	= formIL.TraitInsertLogo(request, logo, util2.getEmail());
			
			if(!formIL.getErreur().isEmpty()) {
				for(HashMap.Entry<String, String> entry : formIL.getErreur().entrySet()) {
					String value = entry.getValue();
					
					setErreur("E", value);
				}
				return util;
			}
		}
}

BDD

public BeanUtilisateur TraitInsertLogo(HttpServletRequest request, String logoTemp, String propTemp) {
		String url 				= "jdbc:mysql://localhost:3306/ae?useLegacyDatetimeCode=false&serverTimezone=Australia/Sydney&useSSL=false";
		String utilisateurBdd	= "root";
		String motDePasse 		= "";
		Connection connexion 	= null;
		
		String logo				= logoTemp;
		String prop				= propTemp;
		
		BeanUtilisateur util	= new BeanUtilisateur();
		
		try {
		    Class.forName( "com.mysql.jdbc.Driver" );
		} catch ( ClassNotFoundException e ) {
			setErreur(ATT_ERREUR, "Class non trouvé.");
			return util;
		}
		
		File monImage = new File(logo);
		FileInputStream istreamImage = null;
		
		
		try {
			istreamImage = new FileInputStream(monImage);
		} catch (FileNotFoundException e1) {
			// TODO Auto-generated catch block
			setErreur(ATT_ERREUR, e1.getMessage());	
		}
		 
		try {
		    connexion = DriverManager.getConnection( url, utilisateurBdd, motDePasse );
		    Statement statement = connexion.createStatement();
		    PreparedStatement preparedStatement = connexion.prepareStatement("INSERT INTO logo (logo, proprietaire) VALUES (?, ?);");
		    
		    preparedStatement.setBinaryStream(1, istreamImage, (int) monImage.length());
		    preparedStatement.setString(2, prop);
		    preparedStatement.executeUpdate();
		    
		    util.setLogo(logo);
		    
		    HttpSession session = request.getSession();
		    Map<String, BeanUtilisateur> TUtilisateur = (HashMap<String, BeanUtilisateur>) session.getAttribute(TABLEAU_UTILISATEUR);
		    
		    TUtilisateur.put(util.getEmail(), util);
		    session.setAttribute(TABLEAU_UTILISATEUR, TUtilisateur);
		    session.setAttribute(BEAN_UTILISATEUR, util);
	 
		}catch (SQLException e ) {
		   setErreur(ATT_ERREUR, "Echec de la connection avec la base de donnée.");
		   return util;
		}finally {
		    if ( connexion != null )
		        try {
		            connexion.close();
		        }catch( SQLException ignore ) {
		         
		        }
		}
		
		return util;
	}

Merci d'avance pour votre aide, je bloque depuis deux jours !

-
Edité par Romain44478965 9 décembre 2018 à 11:08:49

  • Partager sur Facebook
  • Partager sur Twitter
7 décembre 2018 à 16:26:45

Parce que ta variable logo que passe en parametre est seulement 'logo' ca te prend un extension ..
  • Partager sur Facebook
  • Partager sur Twitter
8 décembre 2018 à 6:34:09

Excuse moi mais je ne maîtrise pas trop la gestion de flux, du coup si je comprend bien, le contenu de ma variable doit porter une extension ?

Par exemple image.png ?

C'est le cas, je récupère un fichier  image.png qui est stocké dans la V logo, mais j'ai l'impression que cela ne suffit pas, en mettant le chemin absolue en dur à la place de logo ça fonctionne.

Merci pour ton aide !

-
Edité par Romain44478965 8 décembre 2018 à 6:35:15

  • Partager sur Facebook
  • Partager sur Twitter
9 décembre 2018 à 11:08:04

Si quelqu'un pouvait m'aider ça serai vraiment top, je n'arrive pas a comprendre le problème

J'ai quelques peu modifer mon code :

File monImage = new File(logo).getAbsoluteFile();
		FileInputStream istreamImage = null;
		
		
		try {
			istreamImage = new FileInputStream(monImage);
		} catch (FileNotFoundException e1) {
			// TODO Auto-generated catch block
			setErreur(ATT_ERREUR, e1.getMessage());
		}

Le problème a présent est que le chemin d'accès ne contient que : C:\Users\Romain\Desktop\JEE\eclipse\image.png
Quelque soit l'endroit ou se trouve l'image ...

-
Edité par Romain44478965 9 décembre 2018 à 13:25:25

  • Partager sur Facebook
  • Partager sur Twitter