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

Java Discussion :

Blob Oracle10G et Fichier Docx


Sujet :

Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé Avatar de shaun_the_sheep
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Octobre 2004
    Messages
    1 619
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2004
    Messages : 1 619
    Par défaut Blob Oracle10G et Fichier Docx
    Bonjour,

    Je reprend un vieux morceau de code qui doit permettre d'import un fichier vers un champ de type Blob pour oracle:

    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
     
    .....
    			//Charge le Fichier
    			ServletContext sc = getServletContext();
    			String destPath = sc.getRealPath("/importFiles");
    			inputBinaryFile      = new File(destPath+"/"+str_inputFileName);
    			inputFileInputStream = new FileInputStream(inputBinaryFile);
     
                sqlText =" SELECT Gp_File as myObject " +
                         " From PIECEANNEXE where trim(Gp_Id_Cdt)=trim('"+user_IdProsCand+"') and GP_ID_PIECEANNEXE="+idPieceAnnexe;
                		 //" FOR UPDATE";
     
                rset = statSelect.executeQuery(sqlText);
                rset.next();
                myObject = ((OracleResultSet) rset).getBLOB("myObject");
     
                /*bufferSize = myObject.getBufferSize();
                byteBuffer = new byte[bufferSize];
                blobOutputStream = myObject.getBinaryOutputStream();
    			while ((bytesRead = inputFileInputStream.read(byteBuffer)) != -1) 
    	        { blobOutputStream.write(byteBuffer, 0, bytesRead);
    	          totBytesRead += bytesRead;
    	          totBytesWritten += bytesRead;
                }
                inputFileInputStream.close();*/
     
    		    chunkSize = myObject.getChunkSize();
    		    binaryBuffer = new byte[chunkSize];
       		    position = 1;
    		    while((bytesRead = inputFileInputStream.read(binaryBuffer)) != -1 )
    		    {
    		    	bytesWritten = myObject.putBytes(position, binaryBuffer);//, bytesRead);
    		    	position        += bytesRead;
    		    	totbytesRead    += bytesRead;
    		    	totbytesWritten += bytesWritten;
     
    		    }
        	    inputFileInputStream.close();
     
     
    		    conRes.commit();
    		    rset.close();
    		    statSelect.close();
    Puis j'ai un autre morceau de code qui permet d'extraire un fichier d'un blob :

    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
     
                outputBinaryFile       = new File(destPath+"/"+fileName);
                outputFileOutputStream  = new FileOutputStream(outputBinaryFile);
     
                //blobInputStream = file.getBinaryStream();
                //chunkSize = file.getChunkSize();
                //binaryBuffer = new byte[chunkSize];
                //while ((bytesRead = blobInputStream.read(binaryBuffer)) != -1) 
                //{   outputFileOutputStream.write(binaryBuffer, 0, bytesRead);
                //    totBytesRead += bytesRead;
                //    totBytesWritten += bytesRead;
                //}
                //outputFileOutputStream.close();
                //blobInputStream.close();
     
            	blobLength = file.length();
                chunkSize = file.getChunkSize();
                binaryBuffer = new byte[chunkSize];
                for (position = 1; position <= blobLength; position += chunkSize) 
                {
                   bytesRead = file.getBytes(position, chunkSize, binaryBuffer);
    			   outputFileOutputStream.write(binaryBuffer, 0, bytesRead);
                   totbytesRead += bytesRead;
                   totbytesWritten += bytesRead;
                }
                outputFileOutputStream.close();
    Avec des fichiers type pdf, jpg, doc pas de soucis.

    J'ai un soucis avec les fichiers de types Docx , le fichier est soit disant corrompu à l'ouverture.

    Est ce que quelqu'un a une idée ?

    Je me suis inspiré de cet exemple :
    http://www.idevelopment.info/data/Pr...leExample.java

    Merci à vous.

  2. #2
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Chuis un peu rouillé sur le sujet, et j'ai aucune idée de pourquoi ça marche avec certains fichiers, mais de ce que je m'en souviens :

    - Le FOR UPDATE n'est pas facultatif.

    - bytesRead indique le nombre de bytes qui ont été lus dans le buffer.
    Tu ne peux donc pas mettre tout le buffer dans le put() juste après, il faut mettre exactement le nombre de bytes lus.

    - En toute logique les close() devraient arriver avant le commit(), mais en principe Oracle ne s'en offusque pas.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

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

Discussions similaires

  1. creer fichier docx en java
    Par legendaire dans le forum Documents
    Réponses: 1
    Dernier message: 12/02/2008, 11h20
  2. [BLOB]Charger un fichier dans un BLOB
    Par elitost dans le forum SQL
    Réponses: 0
    Dernier message: 07/02/2008, 12h29
  3. Extraire un champ BLOB vers un fichier sur le serveur
    Par ALEX77 dans le forum Firebird
    Réponses: 7
    Dernier message: 24/09/2007, 21h24
  4. [Oracle] affichage d'un blob contenant un fichier pdf
    Par arezki76 dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 26/07/2007, 16h00
  5. [blob] comment enregistrer fichier
    Par chouchou93 dans le forum Langage SQL
    Réponses: 1
    Dernier message: 02/05/2006, 13h21

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