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

Servlets/JSP Java Discussion :

[java][Oracle]Ouvrir un fichier(blob) avec le browser


Sujet :

Servlets/JSP Java

  1. #1
    Membre habitué
    Inscrit en
    Avril 2003
    Messages
    288
    Détails du profil
    Informations personnelles :
    Âge : 49

    Informations forums :
    Inscription : Avril 2003
    Messages : 288
    Points : 165
    Points
    165
    Par défaut [java][Oracle]Ouvrir un fichier(blob) avec le browser
    J'ai réussi à uploader à partir d'un formulaire, un fichier dans une BDD Oracle (sous forme d'un Blob).
    J'arrive également à récupérer ce Blob dans la base.
    Par contre, je ne sais pas comment utiliser cet objet (faire un lien dessus) pour qu'un utilisateur puisse l'ouvrir automatiquement à partir de son navigateur !

    De plus, comment récupérer le mime Type de cet objet !
    Voici un exemple de ce que j'ai fait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    ..................
    ResultSet rset = declaration.executeQuery("SELECT file_content FROM tampon_upload where id="+value_1+" "); 
    if (rset.next())
    { Blob myblob = ((OracleResultSet)rset).getBLOB(1); 
    }
    ..................
    Que faire ensuite de l'objet myblob ???
    Comment faire un lien sur cet objet, pour ouvrir automatiquement le fichier avec le logiciel adéquat (récupération du mime Type)!

    Merci d'avance

  2. #2
    Membre éprouvé
    Avatar de request
    Inscrit en
    Novembre 2002
    Messages
    328
    Détails du profil
    Informations forums :
    Inscription : Novembre 2002
    Messages : 328
    Points : 1 248
    Points
    1 248
    Par défaut
    Ton file_content est insufisant, il faut stocker son type mime également, pas d'autre solution.

  3. #3
    Membre habitué
    Inscrit en
    Avril 2003
    Messages
    288
    Détails du profil
    Informations personnelles :
    Âge : 49

    Informations forums :
    Inscription : Avril 2003
    Messages : 288
    Points : 165
    Points
    165
    Par défaut
    Voici le code que j'utilise pour uploader mon fichier :
    Remarque : j'utilise une classe "UPLOAD" (pas défini ici) pour l'upload sur le serveur !

    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
     
    // création de l'objet qui va traiter le formulaire
    // le 2ème argument indique le répertoire du serveur (ici un linux) dans lequel les fichiers sont téléchargés
    Upload upload=new Upload(request,"/home2/oracle/upload");
    // lancement du traitement (et du téléchargement);
    upload.process();
     
    // récupération des paramètres (pour les fichiers : noms complets sur le client)
    ...........
    String vFichierDistant1=upload.getParameter("uploadFile");
    ...........
    // récupération des noms locaux des fichiers téléchargés
    String vFichierLocal1=upload.getNameOnServer(vFichierDistant1);
     
    ..................
    String file_path_distant = vFichierDistant1; 
    String file_path_local = "/home2/oracle/upload/"+vFichierLocal1; 
    String file_name = sValeurNomFichier; 
     
    // recherche de l'identifiant du nouvel enregistrement (méthode non définie ici)
    String id_sequence=Resources.nextId("SEQ_TAMPON_UPLOAD",5);
     
    String rInsertFichierJoint="insert into tampon_upload (id_upload,path_fichier_joint,nom_fichier_joint,file_content)";
    rInsertFichierJoint+=" values ("+id_sequence+",'"+file_path_distant+"','"+file_name+"', empty_blob())";
    declaration.executeUpdate(rInsertFichierJoint);
     
    MaConnexion.setAutoCommit(false);   
    ResultSet rset = declaration.executeQuery("SELECT file_content FROM tampon_upload where id_upload="+id_sequence+" for update"); 
    if (rset.next())
    {	BLOB myblob = ((OracleResultSet)rset).getBLOB(1); 
    	FileInputStream instream = new FileInputStream(new File(file_path_local)); 
    	OutputStream outstream = myblob.getBinaryOutputStream(); 
    	int bufsize = myblob.getBufferSize(); 
    	byte[] buffer = new byte[bufsize]; 
    	int length = 0; 
    	while ((length = instream.read(buffer)) != -1) 
    	{	outstream.write(buffer, 0, length); 	}
    	instream.close(); 
    	outstream.close(); 
    } 
    MaConnexion.setAutoCommit(true);   
    ...................
    Comment puis-je récupérer le mime Type du fichier et à quel moment ?
    Comment le champ MIME doit il être défini dans la base (varchar2 ???)
    Merci d'avance !

  4. #4
    Membre éprouvé
    Avatar de request
    Inscrit en
    Novembre 2002
    Messages
    328
    Détails du profil
    Informations forums :
    Inscription : Novembre 2002
    Messages : 328
    Points : 1 248
    Points
    1 248
    Par défaut
    Vu que tu as le fichier, voici ce qu'il faut faire:

    Utilise un fichier MimeType.properties:
    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
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    ez=application/andrew-inset
    hqx=application/mac-binhex40
    cpt=application/mac-compactpro
    doc=application/msword
    bin=application/octet-stream
    dms=application/octet-stream
    lha=application/octet-stream
    lzh=application/octet-stream
    exe=application/octet-stream
    class=application/octet-stream
    so=application/octet-stream
    dll=application/octet-stream
    oda=application/oda
    pdf=application/pdf
    ai=application/ps
    eps=application/ps
    ps=application/ps
    smi=application/smil
    smil=application/smil
    mif=application/vnd.mif
    xls=application/vnd.ms-excel
    ppt=application/vnd.ms-powerpoint
    wbxml=application/vnd.wap.wbxml
    wmlc=application/vnd.wap.wmlc
    wmlsc=application/vnd.wap.wmlscriptc
    bcpio=application/x-bcpio
    vcd=application/x-cdlink
    pgn=application/x-chess-pgn
    cpio=application/x-cpio
    csh=application/x-csh
    dcr=application/x-director
    dir=application/x-director
    dxr=application/x-director
    dvi=application/x-dvi
    spl=application/x-futuresplash
    gtar=application/x-gtar
    hdf=application/x-hdf
    js=application/x-js
    skp=application/x-koan
    skd=application/x-koan
    skt=application/x-koan
    skm=application/x-koan
    latex=application/x-latex
    nc=application/x-netcdf
    cdf=application/x-netcdf
    sh=application/x-sh
    shar=application/x-shar
    swf=application/x-shockwave-flash
    sit=application/x-stuffit
    sv4cpio=application/x-sv4cpio
    sv4crc=application/x-sv4crc
    tar=application/x-tar
    tcl=application/x-tcl
    tex=application/x-tex
    texinfo=application/x-texinfo
    texi=application/x-texinfo
    t=application/x-troff
    tr=application/x-troff
    roff=application/x-troff
    man=application/x-troff-man
    me=application/x-troff-me
    ms=application/x-troff-ms
    ustar=application/x-ustar
    src=application/x-wais-source
    xhtml=application/xhtml+xml
    xht=application/xhtml+xml
    zip=application/zip
    au=audio/basic
    snd=audio/basic
    mid=audio/midi
    midi=audio/midi
    kar=audio/midi
    mpga=audio/mpeg
    mp2=audio/mpeg
    mp3=audio/mpeg
    aif=audio/x-aiff
    aiff=audio/x-aiff
    aifc=audio/x-aiff
    m3u=audio/x-mpegurl
    ram=audio/x-pn-realaudio
    rm=audio/x-pn-realaudio
    rpm=audio/x-pn-realaudio-plugin
    ra=audio/x-realaudio
    wav=audio/x-wav
    pdb=chemical/x-pdb
    xyz=chemical/x-xyz
    bmp=image/bmp
    gif=image/gif
    ief=image/ief
    jpeg=image/jpeg
    jpg=image/jpeg
    jpe=image/jpeg
    png=image/png
    tiff=image/tiff
    tif=image/tiff
    djvu=image/vnd.djvu
    djv=image/vnd.djvu
    wbmp=image/vnd.wap.wbmp
    ras=image/x-cmu-raster
    pnm=image/x-portable-anymap
    pbm=image/x-portable-bitmap
    pgm=image/x-portable-graymap
    ppm=image/x-portable-pixmap
    rgb=image/x-rgb
    xbm=image/x-xbitmap
    xpm=image/x-xpixmap
    xwd=image/x-windowdump
    igs=model/iges
    iges=model/iges
    msh=model/mesh
    mesh=model/mesh
    silo=model/mesh
    wrl=model/vrml
    vrml=model/vrml
    css=text/css
    html=text/html
    htm=text/html
    asc=text/plain
    txt=text/plain
    rtx=text/richtext
    rtf=text/rtf
    sgml=text/sgml
    sgm=text/sgm
    tsv=text/tab-separated-values
    wml=text/vnd.wap.xml
    wmls=text/vnd.wap.wmlscript
    etx=text/x-setext
    xml=text/xml
    xsl=text/xml
    mpeg=video/mpeg
    mpg=video/mpeg
    mpe=video/mpeg
    qt=video/quicktime
    mov=video/quicktime
    mxu=video/vdn.mpegurl
    avi=video/x-msvideo
    movie=video/x-sgi-movie
    ice=xconference/x-cooltalk
    Et ce bout de code te donne le type mime

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    ResourceBundle types= ResourceBundle.getBundle("MimeTypes");
     
        int index = fichier.lastIndexOf(".");
        String ext = "txt";
        if (index >= 0) {
          ext = resource.substring(index + 1);
        }
     
    response.setContentType(types.getString(ext));

  5. #5
    Membre habitué
    Inscrit en
    Avril 2003
    Messages
    288
    Détails du profil
    Informations personnelles :
    Âge : 49

    Informations forums :
    Inscription : Avril 2003
    Messages : 288
    Points : 165
    Points
    165
    Par défaut
    Pour le type du fichier, j'ai bien compris ! Merci !

    Par contre, comment je lance ensuite le fichier récupérer dans le Blob ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    ResultSet rset = declaration.executeQuery("SELECT file_content FROM tampon_upload where id="+value_1+" "); 
    if (rset.next()) 
    { Blob myblob = ((OracleResultSet)rset).getBLOB(1); 
    }
    Il faut faire un <a href="XXX"></a>
    Qu'est-ce que je mets dans les XXX ?
    Vers quoi faut il rediriger, et comment utiliser l'objet myblob

    Merci d'avance !

  6. #6
    Membre éprouvé
    Avatar de request
    Inscrit en
    Novembre 2002
    Messages
    328
    Détails du profil
    Informations forums :
    Inscription : Novembre 2002
    Messages : 328
    Points : 1 248
    Points
    1 248
    Par défaut
    Citation Envoyé par marsup54
    Pour le type du fichier, j'ai bien compris ! Merci !

    Par contre, comment je lance ensuite le fichier récupérer dans le Blob ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    ResultSet rset = declaration.executeQuery("SELECT file_content FROM tampon_upload where id="+value_1+" "); 
    if (rset.next()) 
    { Blob myblob = ((OracleResultSet)rset).getBLOB(1); 
    }
    Il faut faire un <a href="XXX"></a>
    Qu'est-ce que je mets dans les XXX ?
    Vers quoi faut il rediriger, et comment utiliser l'objet myblob

    Merci d'avance !
    Tu peux directement renvoyer le fichier ou faire un lien sur une servlet qui te le renvoie. Pour complétér ma réponse, voici le code de ta servlet:

    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
    ResourceBundle types= ResourceBundle.getBundle("MimeTypes"); 
     
        int index = fichier.lastIndexOf("."); 
        String ext = "txt"; 
        if (index >= 0) { 
          ext = resource.substring(index + 1); 
        } 
     
        response.setContentType(types.getString(ext));
     
     
        BufferedInputStream bis = new BufferedInputStream(streamDuBlob);
        BufferedOutputStream bos = new BufferedOutputStream(response.getOutputStream());
        byte[] input = new byte[1024];
        boolean eof = false;
        while (!eof) {
          int length = bis.read(input);
          if (length == -1) {
            eof = true;
          }
          else {
            bos.write(input, 0, length);
          }
        }
        bos.flush();

  7. #7
    Membre habitué
    Inscrit en
    Avril 2003
    Messages
    288
    Détails du profil
    Informations personnelles :
    Âge : 49

    Informations forums :
    Inscription : Avril 2003
    Messages : 288
    Points : 165
    Points
    165
    Par défaut
    OK merci !

    Juste une précision sur "streamDuBlob" :
    dans :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    BufferedInputStream bis = new BufferedInputStream(streamDuBlob);
    quelle méthode appliquer sur mon objet "myblob" pour avoir le bon format ?

    Merci d'avance !

  8. #8
    Membre éprouvé
    Avatar de request
    Inscrit en
    Novembre 2002
    Messages
    328
    Détails du profil
    Informations forums :
    Inscription : Novembre 2002
    Messages : 328
    Points : 1 248
    Points
    1 248
    Par défaut
    Tu n'as pas cherché longtemps là!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    InputStream streamDuBlob = myblob.getBinaryStream();

  9. #9
    Membre habitué
    Inscrit en
    Avril 2003
    Messages
    288
    Détails du profil
    Informations personnelles :
    Âge : 49

    Informations forums :
    Inscription : Avril 2003
    Messages : 288
    Points : 165
    Points
    165
    Par défaut
    Désolé, je n'ai pas beaucoup d'expérience !
    Effectivement, c'est bien dans la javadoc ! Je pensais que dans mon cas il fallait utiliser des api's d'Oracle !

    Encore merci !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Ouvrir un fichier excel avec Java?
    Par pigeonfurtif dans le forum API standards et tierces
    Réponses: 5
    Dernier message: 19/05/2010, 11h45
  2. comment ouvrir un fichier XML avec excel
    Par ALCINA dans le forum XML/XSL et SOAP
    Réponses: 7
    Dernier message: 24/03/2006, 14h42
  3. Peut-on ouvrir un fichier bmp avec la lib X11 ?
    Par caesarvanou dans le forum C
    Réponses: 7
    Dernier message: 10/02/2006, 18h32
  4. ouvrir un fichier Excel avec une requete perso
    Par legillou dans le forum Access
    Réponses: 9
    Dernier message: 21/06/2005, 15h14
  5. [DOM] [JAVA + XML] Ouvrir un fichier xml à partir d'une url
    Par Hell dans le forum Format d'échange (XML, JSON...)
    Réponses: 2
    Dernier message: 09/06/2005, 00h06

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