IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Développement Web en Java Discussion :

Accéder à des fichiers sur le serveur hors du context-root


Sujet :

Développement Web en Java

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    129
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 129
    Points : 81
    Points
    81
    Par défaut Accéder à des fichiers sur le serveur hors du context-root
    Bonjour

    Je cherche à afficher une image qui est sur le serveur où tourne mon application mais cette image n'est pas dans le context de l'application.

    (pour moi je cherche à afficher une image mais le problème est identique si je voudrai accéder à un autre type de fichier)

    Exemple : mon context-root est : C:\Documents and Settings\workspace\
    Et l'image que je veux afficher est sur : C:\image.jpg

    Donc comme l'image est hors du context root je ne peux pas faire un chemin du genre ../../../image.jpg car les ../ ne remontent pas plus loin que le context-root...

    Merci de votre aide.

  2. #2
    Rédacteur

    Avatar de millie
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    7 015
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 7 015
    Points : 9 818
    Points
    9 818
    Par défaut
    Il y a plusieurs possibilités.

    La plus simple étant de créer une servlet spécifique qui permet d'envoyer des images se trouvant quelque part (mais il faut faire très attention au niveau sécurité).

    Donc déjà, je me demande pourquoi tu dois afficher une image hors du contexte. Est-ce une image générée automatiquement ?


    Voici un exemple de servlet qui permet ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    public class ImageReader extends javax.servlet.http.HttpServlet implements javax.servlet.Servlet {
        /* (non-Java-doc)
    	 * @see javax.servlet.http.HttpServlet#HttpServlet()
    	 */
    	public ImageReader() {
    		super();
    	}   	
     
    	/* (non-Java-doc)
    	 * @see javax.servlet.http.HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
    	 */
    	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    		String id = request.getParameter("image");
    		System.err.println("Remote User :" + request.getRemoteHost());
    		System.err.println("Remote Adress : " + request.getRemoteAddr());
    		if(url!=null) {
    			String location = ImageLocation.getLocation(id);
    			if(location!=null) {
    				byte[] field = new byte[5000];
     
    				response.setContentType("image/GIF");
    				OutputStream oStream = response.getOutputStream();
    				BufferedOutputStream bOStream = new BufferedOutputStream(oStream);
     
    				InputStream iStream = new FileInputStream(location);
    				BufferedInputStream bIStream = new BufferedInputStream(iStream);
     
    				while((bIStream.read(field)) >=0) {
    					bOStream.write(field);
    				}
    				bOStream.flush();
     
    				bOStream.close();
    				bIStream.close();
     
    				//File fileImage = new File(location);
    				//fileImage.delete();
    			}
    		}
    	}  	  	  	    
    }
    Pour des raisons de sécurité, je passe par une classe que j'appelle : ImageLocation.getLocation(id); qui permet en fait de récuperer le lien du fichier en utilisant un identifiant (id) qui permet au moins de ne pas pouvoir attaquer la servlet n'importe comment (donc récuperer des fichiers sensibles par exemple).

    Je précise qu'il y a un petit bug dans (mais je te laisse chercher) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    				while((bIStream.read(field)) >=0) {
    					bOStream.write(field);
    				}
    Je ne répondrai à aucune question technique en privé

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    129
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 129
    Points : 81
    Points
    81
    Par défaut
    Merci millie pour la réponse. Je ne clos aps desuite le sujet car je n'ai malheureusement pas le temps de tester ça desuite mais dès que je peux .

    Sinon pourquoi je veux accéder à une image hors du context : en fait j'ai 2 applications sur un serveur. Ils travaillent chacun de leur côté MAIS ils doivent partager leurs images...

  4. #4
    Membre régulier
    Homme Profil pro
    Ingénieur de projets
    Inscrit en
    Mai 2007
    Messages
    103
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur de projets
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2007
    Messages : 103
    Points : 97
    Points
    97
    Par défaut
    Bonjour,

    J'ai a peu pres le meme probleme.

    Voici mon contexte.

    j'ai un serveur Web dans lequel j'ai mon Applet.

    J'aimerai récupérer un fichier .txt/.dat/.bin dans un dossier du serveur exterieur à mon dossier web.

    Concretement, je souhaite pointer sur ce fichier, le copier et le coller dans mon dossier dans lequel j'ai mon applet.


    Dois-je utiliser un servlet? ou y a t-il une facon de le faire plus simplement?(i.e : utilisation des URL et des FILE directement)

    EDIT: En fait actuellement j'utilise un topic de la FAQ developpez.com pour parcourir un dossier (oui il faut bien essayer de parcourir un dossier avant d'ouvrir un fichier).
    Et en fait, lorsque je met mon url (http://adresseIpServeur/mondossier), je me retrouve dans c://mondossier.

    Pourquoi donc?



    MustOne
    MustOne -

    Qui aime Java, mais qui galère à comprendre les subtilités....ou à comprendre tout court
    citation: "ce n'est pas parce qu'on aime un arbre, qu'on ne peut pas contempler la forêt", à rétorquer si votre conjoint(e) vous reproche de trop "mater"

  5. #5
    Membre éclairé Avatar de rberthou
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    612
    Détails du profil
    Informations personnelles :
    Âge : 59
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 612
    Points : 690
    Points
    690
    Par défaut
    Personnelement je reste très simple (j'utilise une lib apache)

    J'ai un code jsp de ce style
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
     
    <%
    	String file = request.getParameter("file") ;
     
    	String sss = file.trim().toLowerCase() ;
    	boolean tpTXT  = sss.endsWith(".txt") || sss.endsWith(".log")  ;
    	boolean tpPDF  = sss.endsWith(".pdf")  ;
    	boolean tpHTML = sss.endsWith(".html") ;
    	boolean tpXML  = sss.endsWith(".xml") ;
    	boolean tpWORD = sss.endsWith(".doc") || sss.endsWith(".rtf")  ;
    	boolean tpXLS  = sss.endsWith(".xls")  ;
     
    	if (tpPDF)  response.setContentType("application/pdf") ; else
    	if (tpTXT)  response.setContentType("text/plain") ; else
    	if (tpHTML) response.setContentType("text/html") ; else
    	if (tpXML)  response.setContentType("text/xml") ; else
    	if (tpXLS)  response.setContentType("application/msexcel") ; else
    	if (tpWORD) response.setContentType("application/msword") ; 
     
    org.apache.commons.net.io.Util.copyStream(new java.io.FileInputStream(file), response.getOutputStream()) ;
    %>
    Je ne traite pas les images mais il suffit d'envoyer le bon ContentType (cela doit meme fonctionner sans)
    - Informaticien passionné
    - ( java, c++, cobol, php, asp, ... )
    - http://www.berthou.com/fr/

  6. #6
    Membre régulier
    Homme Profil pro
    Ingénieur de projets
    Inscrit en
    Mai 2007
    Messages
    103
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur de projets
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2007
    Messages : 103
    Points : 97
    Points
    97
    Par défaut
    Coucou,

    En fait, je ne peux pas tester ta solution car mon serveur ne dispose pas d'apache. De plus, c'est un serveur figé -dans le sens où je ne peux rien y ajouter à part mes pages web.

    Cependant, j'ai résoulu mon problème d'accès à mon fichier.

    voici le code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
     
    //ETABLISSEMENT DE LA CONNEXION/POINTAGE AU FICHIER
            try
            {//etablissement de l'URL du fichier selon le fichier transmis en parametre
               urlFile = new URL("adresse_dossier" + fileName);
            }catch(MalformedURLException mue)
            {
                   System.err.println(mue);
            }
            try
            {//Ouverture de la connexion selon l'URL
                urlFileCon = urlFile.openConnection();
            }catch(IOException ex)
            {
                System.err.println(ex);
            }
            if (urlFileCon.getContentLength()> 0) 
            {//s'il y a du contenu
                try
                {//Récupération du contenu du stream
                  input = urlFileCon.getInputStream();
                }catch(IOException ex)
                {
                    System.err.println(ex);
                }
                try//lecture du fichier
                {
                   while((octet = input.read())!= -1)
                   {//Lecture Byte/Byte => pas besoin de buffer
                        //incrémentation du compteur de byte
                         CptrNbByte += 1;
                        //enregistrement du int dans le tab
                         intTab[CptrNbByte] = octet;
                    }
                 //fermeture du fichier
                  input.close();
                 //initialisation des Compteurs
                  CptrNbByte = 0;
               }
               catch ( IOException iox )
               {
                 System.out.println("Problem reading " + fileName + " error: "+iox);
               }         
         }//end of if

    En espérant que ca peut en aider quelques uns.

    Merci tout de même pour ton post.


    MustOne
    MustOne -

    Qui aime Java, mais qui galère à comprendre les subtilités....ou à comprendre tout court
    citation: "ce n'est pas parce qu'on aime un arbre, qu'on ne peut pas contempler la forêt", à rétorquer si votre conjoint(e) vous reproche de trop "mater"

Discussions similaires

  1. acces concurent à des fichiers sur le serveur
    Par al3alwa dans le forum Servlets/JSP
    Réponses: 9
    Dernier message: 08/06/2007, 16h41
  2. Authentification et Synchronisation des fichiers sur un serveur
    Par zelig dans le forum Windows Serveur
    Réponses: 3
    Dernier message: 30/05/2007, 16h32
  3. Suppression automatique des fichiers sur le serveur
    Par phpieur dans le forum ASP.NET
    Réponses: 9
    Dernier message: 17/05/2007, 14h19
  4. un conseil pour exporter des fichier sur un serveur ftp
    Par pierrot67 dans le forum Delphi
    Réponses: 1
    Dernier message: 03/12/2006, 12h15
  5. [Strategie] Accéder à des fichiers sur un serveur
    Par elan dans le forum Général Java
    Réponses: 4
    Dernier message: 28/09/2005, 19h30

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo