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

Struts 1 Java Discussion :

[Struts][Oracle]Upload fichier word dans une base


Sujet :

Struts 1 Java

  1. #1
    Membre émérite Avatar de Maximil ian
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 622
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 622
    Points : 2 973
    Points
    2 973
    Par défaut [Struts][Oracle]Upload fichier word dans une base
    Bonjour,

    Dans le cadre de mon stage, je réalise une appli J2EE s'appuyant sur Struts. L'utilisateur a demandé de pouvoir uploader des fichiers Word afin qu'ils soient accessibles en consultation. Pour des raisons de sécurité internes à la boîte, ces fichiers ne doivent pas être stockés en tant que tels sur le serveur, mais dans des champs (BLOB ou CLOB) d'une base Oracle.
    J'ai repéré une fonctionnalité bien utile de Struts, à savoir la balise <html:file> qui permet par la suite de gérer facilement le fichier uploadé via un InputStream dans la classe Action.

    Mon idée était de lire cet InputStream octet par octet et de construire ainsi une chaine de caractères représentant le VALUES de la requête INSERT INTO, mais j'ai peur que ça cafouille un peu :

    1/ au niveau de cette chaine de caractères : si le fichier Word fait 100ko, je doute qu'on puisse tout mettre dans une seule chaîne.

    2/ au niveau du format, il risque d'y avoir des ratés quand on met les données du InputStream dans une String...


    Bref, si quelqu'un peut me conseiller sur la manière de mettre un fichier Word dans un champ BLOB sans déperdition de données, je suis preneur...

    Merci à ceux qui auront eu la patience de lire ce post en entier
    Pensez au bouton

  2. #2
    Membre émérite Avatar de Maximil ian
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 622
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 622
    Points : 2 973
    Points
    2 973
    Par défaut
    Personne n'a d'idées ?
    Je sais que le problème n'est pas forcément simple mais il doit bien y avoir d'autres programmeurs qui y ont été confrontés
    Pensez au bouton

  3. #3
    Membre averti
    Avatar de knotty
    Inscrit en
    Mars 2002
    Messages
    126
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 126
    Points : 391
    Points
    391
    Par défaut
    PreparedStatement a setBlob
    L'Objet Blob a setBinaryStream, qui te permet d'ecrire dans le Blob.

    A priory, il suffit d'ouvrir le fichier avec un input Stream, lire l'input, et le rediriger dans le Blob.

    Je ne vois pas pourquoi une String serait utile.
    Ceci etant dit, je ne vois pas non plus pourquoi une String de 100ko serait un probleme, tu m'aurais dit 300Mo, a la rigueur.

    Bon courage.
    Christophe Ludet
    Testez vos connaissances Java - http://knotty.developpez.com
    Donner des ailes a votre application (J2EE patterns) - http://knotty.developpez.com/j2ee

  4. #4
    Membre émérite Avatar de Maximil ian
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 622
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 622
    Points : 2 973
    Points
    2 973
    Par défaut
    Citation Envoyé par knotty
    A priory, il suffit d'ouvrir le fichier avec un input Stream, lire l'input, et le rediriger dans le Blob.
    C'est à dire ? Comment fait-on concrètement ?

    Citation Envoyé par knotty
    Je ne vois pas pourquoi une String serait utile.
    Ben pour mettre le contenu du fichier dans le VALUES du INSERT INTO. Le String c'est pour la requête SQL à envoyer.

    Citation Envoyé par knotty
    Ceci etant dit, je ne vois pas non plus pourquoi une String de 100ko serait un probleme, tu m'aurais dit 300Mo, a la rigueur.
    Disons que je ne connais pas la taille des fichiers Word qui seront uploadés. Il est possible qu'ils atteignent plusieurs Mo (par exemple s'ils contiennent des images). Je me disais que ça faisait un peu gros pour une seule variable, mais apparement non
    Pensez au bouton

  5. #5
    Membre averti
    Avatar de knotty
    Inscrit en
    Mars 2002
    Messages
    126
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 126
    Points : 391
    Points
    391
    Par défaut
    Ca va surtout faire gros pour ta DB, mais avec un bon DBA, ca sera pas un probleme.

    Pour commencer, utiliser un PreparedStatement, comme je te dis, donc pas besoin de String. Ta requete:
    INSERT INTO maTable (monBlob) VALUES(?)

    Puisque tu sembles vouloir un exemple de code, j'ai trouve ca sur Google:

    http://<br /> http://www.classicity...4/3.html<br />

    Tu remarqueras cette ligne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    blob = ((OracleResultSet)rset).getBLOB(2);
    J'aime pas cette methode. Prefere un factory pattern pour creer ton blob. Mais ceci devrait te permettre de comprendre.

    Voila, tu as de quoi t'occuper.

    Bon courage.
    Christophe Ludet
    Testez vos connaissances Java - http://knotty.developpez.com
    Donner des ailes a votre application (J2EE patterns) - http://knotty.developpez.com/j2ee

  6. #6
    Membre émérite Avatar de Maximil ian
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 622
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 622
    Points : 2 973
    Points
    2 973
    Par défaut
    OK, je commence à mieux cerner les choses. Je ne savais pas qu'il existait des méthodes du driver JDBC pour manipuler les BLOB. Donc je vais examiner tout ça.

    Merci encore pour ton aide
    Pensez au bouton

  7. #7
    ndp
    ndp est déconnecté
    Membre actif Avatar de ndp
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    227
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 227
    Points : 255
    Points
    255
    Par défaut
    Salut,

    tu peut aussi tester avec un gros fichier:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    setBinaryStream
    public void setBinaryStream(int parameterIndex,
                                InputStream x,
                                int length)
                         throws SQLExceptionSets the designated parameter to the given input stream, which will have the specified number of bytes. When a very large binary value is input to a LONGVARBINARY parameter, it may be more practical to send it via a java.io.InputStream object. The data will be read from the stream as needed until end-of-file is reached. 
    Note: This stream object can either be a standard Java stream object or your own subclass that implements the standard interface

  8. #8
    Membre émérite Avatar de Maximil ian
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 622
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 622
    Points : 2 973
    Points
    2 973
    Par défaut
    Merci, je vais regarder ça aussi.

    Une dernière question : pour récupérer le fichier dans la base et l'envoyer au navigateur, comment ça se passe grosso modo ? Un peu comme en PHP avec un envoi de headers ?
    Pensez au bouton

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

Discussions similaires

  1. Insertion des fichiers pdf dans une base oracle
    Par arezki76 dans le forum SQL
    Réponses: 2
    Dernier message: 20/07/2007, 16h39
  2. insertion des données d'un fichier word dans une base de données
    Par pigeon015 dans le forum Windows Forms
    Réponses: 1
    Dernier message: 08/02/2007, 09h04
  3. Réponses: 1
    Dernier message: 09/05/2006, 12h00
  4. Réponses: 3
    Dernier message: 13/12/2004, 13h54
  5. Enregistremenbt d'un fichier WORD dans une base de données
    Par yam49 dans le forum Bases de données
    Réponses: 4
    Dernier message: 02/08/2004, 15h01

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