Pseudo-Archive Java :
Accueil -|- Visuel -|- Logistique -|- Applications réparties
La pseudo-archive Java est un service proposé par la SARL diaam informatique, et il est hébergé par la Sogid.
diaam informatique
From:           	rafael.ainciart@afnor.fr
To:             	java@u-strasbg.fr
Subject:        	Upload et insertion en BDD...
Date sent:      	Tue, 11 Sep 2001 11:07:14 +0200
Send reply to:  	java@u-strasbg.fr

Bonjour, 
Je suis nouveau dans le Java World et également nouveau parmi vous. Je
profite de mon premier message pour saluer tous les participants ;) Mon
problème est le suivant : Pour une application web tournant sur un serveur
Netscape, je suis en train de réaliser une servlet permettant l'upload de
fichiers texte depuis les postes clients (grâce à un input file accessible
avec leur navigateur) vers notre serveur. Bien que peu expérimenté en Java
(mais je progresse !), les classes com.oreilly.servlet.MultipartRequest
(HttpServletRequest, nom_du_repertoire_tmp) m'ont bien aidé pour réaliser
le composant. L'upload semble bien se dérouler et le fichier est bien
disponible sur le serveur au final. L'objectif suivant consiste à attaquer
ce fichier (dont la structure est connue) pour insérer les données dans
une base de données Oracle. Cette solution fonctionne mais n'est pas très
satisfaisante et je souhaiterais pouvoir réaliser l'insertion en base de
données directement à partir du flux de données de l'upload et sans passer
par l'étape de création du fichier sur le serveur. A vrai dire, je ne sais
pas si cette solution est envisageable ni comment la réaliser.

Auriez vous une idée sur la méthode à utiliser pour parvenir au résultat
attendu ?

Je tiens à votre disposition les extraits de code qui vous seraient
nécessaires pour m'aider.

Merci d'avance.
Amicalement, 

Rafael.

     

Date sent:      	Tue, 11 Sep 2001 11:30:05 +0200
From:           	Jerome Moliere <moliere@viveo-montpellier.com>
To:             	java@u-strasbg.fr
Subject:        	Re: Upload et insertion en BDD...
Send reply to:  	java@u-strasbg.fr



rafael.ainciart@afnor.fr wrote:

>Bonjour, 
>Je suis nouveau dans le Java World et également nouveau parmi vous. Je
>profite de mon premier message pour saluer tous les participants ;)
>
bonjour a toi...

>
>Mon problème est le suivant :
>Pour une application web tournant sur un serveur Netscape, je suis en
>train de réaliser une servlet permettant l'upload de fichiers texte
>depuis les postes clients (grâce à un input file accessible avec leur
>navigateur) vers notre serveur. Bien que peu expérimenté en Java (mais je
>progresse !), les classes com.oreilly.servlet.MultipartRequest
>(HttpServletRequest, nom_du_repertoire_tmp) m'ont bien aidé pour réaliser
>le composant. L'upload semble bien se dérouler et le fichier est bien
>disponible sur le serveur au final. L'objectif suivant consiste à
>attaquer ce fichier (dont la structure est connue) pour insérer les
>données dans une base de données Oracle. Cette solution fonctionne mais
>n'est pas très satisfaisante et je souhaiterais pouvoir réaliser
>l'insertion en base de données directement à partir du flux de données de
>l'upload et sans passer par l'étape de création du fichier sur le
>serveur. A vrai dire, je ne sais pas si cette solution est envisageable
>ni comment la réaliser.
>
comme tu la vraisemblablement compris, la methode doGet ou doPost d'une
servlet a 2 parametres correspodant aux flux entrants et sortant .donc tu
peux imaginer le traitement que tu veux sur le flux entrant de ta servlet
(Request), c'est a dire a l'aide d'un iterator le parcourir, le stocker
dans un buffer (byte ou string) puis l'envoyer via JDBC dans ta base
Oracle...



Je ne sais pas ce que tu attends de plus, donc je suis a ta dispo (comme
le restant de la liste je pense) pour plus d'infos...

Jerome


     

Date sent:      	Tue, 11 Sep 2001 05:34:59 -0400
From:           	Patrice Godard <patrice.godard@operamail.com>
To:             	java <java@u-strasbg.fr>
Subject:        	RE: Upload et insertion en BDD...
Send reply to:  	java@u-strasbg.fr

Attention à la création d'un fichier sur le serveur.
Il faut impérativement que ton nom de fichier soit unique si tu ne veux
pas avoir de problèmes d'accès concurrents. Il me semble qu'il y a une
méthode Java pour en créer un mais je ne l'ai plus en tête (help la
liste!).

Si les classes de O'Reilly te le permettent tu peux uploader ton fichier
non pas dans un fichier sur disque mais dans un ByteArrayOutputStream ou
un StringWriter. Ensuite tu peux parcourir le dit fichier avec un
ByteArrayInputStream ou un StringReader par exemple.

-------------------------------------------
The Fastest Browser on Earth now for FREE!!
Download Opera 5 for Windows now! Get it at
http://www.opera.com/download/
-------------------------------------------

     

From:           	ROUSSEL Yohann <yohann.roussel@criltelecom.com>
To:             	"'java@u-strasbg.fr'" <java@u-strasbg.fr>
Subject:        	RE: Upload et insertion en BDD...
Date sent:      	Tue, 11 Sep 2001 11:38:03 +0200
Send reply to:  	java@u-strasbg.fr



> -----Message d'origine-----
> De : Patrice Godard [mailto:patrice.godard@operamail.com]
> Envoyé : mardi 11 septembre 2001 11:35
> À : java
> Objet : RE: Upload et insertion en BDD...
> 
> 
> Attention à la création d'un fichier sur le serveur.
> Il faut impérativement que ton nom de fichier soit unique si 
> tu ne veux pas 
> avoir de problèmes d'accès concurrents.
> Il me semble qu'il y a une méthode Java pour en créer un mais 
> je ne l'ai plus 
> en tête (help la liste!).

ce que tu cherchais c'est File.createTempFile() mais il me semble que la
solution envisagee de traiter le stream au fur et a mesure serait plus
satisfaisant de toute facon

> 
> Si les classes de O'Reilly te le permettent tu peux uploader 
> ton fichier non 
> pas dans un fichier sur disque mais dans un 
> ByteArrayOutputStream ou un 
> StringWriter. Ensuite tu peux parcourir le dit fichier avec un 
> ByteArrayInputStream ou un StringReader par exemple.
> 
> -------------------------------------------
> The Fastest Browser on Earth now for FREE!!
> Download Opera 5 for Windows now! Get it at
> http://www.opera.com/download/
> -------------------------------------------
> 

     

From:           	"Erik Mazoyer" <erik.mazoyer@laposte.net>
To:             	<java@u-strasbg.fr>
Subject:        	Re: Upload et insertion en BDD...
Date sent:      	Tue, 11 Sep 2001 11:57:49 +0200
Send reply to:  	java@u-strasbg.fr

La classe com.oreilly.servlet.MultipartRequest ne permet pas d'écrire
ailleur que dans un fichier ayant comme nom celui transmit par le
navigateur. J'ai eu le même soucis que toi, et j'ai complétement réécris
la classe pour gérer cela sous forme de stream et de pouvoir diriger ma
sortie vers le lieu de stockage que j'avais choisi. Cest assez complexe
pour un débutant Java :-(

L'idée de base est de bien comprendre le strucutre des données
"multipart/form-data" et de créer un inputstream sur chacune des données
contenues dans données "multipart/form-data".

Il faut créer un InputStream qui sache lire un InputStream avec détection
d'un motif de fin (car les datas dans un "multipart/form-data"  sont
séparées par une ligne particulière). C'est assez embêtant à écrire :-(

Puisj'avais créé une interface DataHandler pour permettre un traitement à
chaque découverte d'une data dans le formulaire (à l'image d'un
org.xml.sax ContentHandler (oublie si tu ne connais pas)).

Après cela, je pouvais utiliser les "multipart/form-data" comme il me
plaisait, dans un Servlet ou dans mon propre serveur HTTP.

Je ne peut pas te fournir l'implémentation car je n'ai plus cette classe
sous la main.

Maintenant, ça me semble être une classe bien utile que nous pourrions
(les membres de la liste) écrire de concert. Reste juste à trouver un
hébergement de notre travail. Quelqu'un a t'il une idée ?

Nous échangons souvent des solutions techniques, pourquoi ne pas associer
un lieu de stockage des solutions partagées ?

Cordialement,

--------------------------------------------------------------------
Erik Mazoyer, Chef de projet
HyperOffice
6, rue Jacques Daguerre - 92565 Rueil-Malmaison Cedex
Tél. 01 41 96 96 76
Fax 01 41 96 96 77
Mél  erik.mazoyer@hyperoffice.fr


----- Original Message -----
From: <rafael.ainciart@afnor.fr>
To: <java@u-strasbg.fr>
Sent: Tuesday, September 11, 2001 11:07 AM
Subject: Upload et insertion en BDD...


> Bonjour,
> Je suis nouveau dans le Java World et également nouveau parmi vous. Je
> profite de mon premier message pour saluer tous les participants ;) Mon
> problème est le suivant : Pour une application web tournant sur un
> serveur Netscape, je suis en
train
> de réaliser une servlet permettant l'upload de fichiers texte depuis les
> postes clients (grâce à un input file accessible avec leur navigateur)
vers
> notre serveur. Bien que peu expérimenté en Java (mais je progresse !),
> les classes com.oreilly.servlet.MultipartRequest (HttpServletRequest,
> nom_du_repertoire_tmp) m'ont bien aidé pour réaliser le composant.
> L'upload semble bien se dérouler et le fichier est bien disponible sur
> le serveur au final. L'objectif suivant consiste à attaquer ce fichier
> (dont la structure est connue) pour insérer les données dans une base de
> données Oracle. Cette solution fonctionne mais n'est pas très
> satisfaisante et je souhaiterais pouvoir réaliser l'insertion en base de
> données directement à partir du flux de données de l'upload et sans
> passer par l'étape de
création
> du fichier sur le serveur. A vrai dire, je ne sais pas si cette solution
est
> envisageable ni comment la réaliser.
>
> Auriez vous une idée sur la méthode à utiliser pour parvenir au résultat
> attendu ?
>
> Je tiens à votre disposition les extraits de code qui vous seraient
> nécessaires pour m'aider.
>
> Merci d'avance.
> Amicalement,
>
> Rafael.
>
>
>
>
>
>

     

From:           	rafael.ainciart@afnor.fr
To:             	java@u-strasbg.fr
Subject:        	RE: Upload et insertion en BDD...
Date sent:      	Tue, 11 Sep 2001 12:06:11 +0200
Send reply to:  	java@u-strasbg.fr

Bonjour Jerome,

> Je ne sais pas ce que tu attends de plus
Tu as très bien saisi ma problématique et tu y as répondu. En effet, je
peux envisager de stocker le flux dans un champ de type LOB. Je n'y avais
pas pensé et cela rend l'utilisation d'un fichier plat inutile.

Les fichiers uploadés doivent (normalement) respecter un structure
relationnelle (valeurs séparées par des ";"). Je sais grâce à toi que je
peux stocker le flux de manière destructurées (dans un champ LOB). Ensuite
cela me permettra de réattaquer la base pour lire le champ LOB, vérifier
l'intégrité des données et enfin insérer les valeurs dans les champs
prévus à cet effet.

Si je veux optimiser le traitement, je peux aussi chercher à éviter le
stockage en mode destructuré dans le fichier LOB. Cela reviendrait à lire
directment le flux uploadé, vérifier l'intégrité des données à partir de
ce flux et finalement insérer les valeurs dans les champs prédéfinis. Ca
parait possible ? Existe t-il un moyen de lecture et d'analyse du flux ?
J'espère que je ne suis pas trop confus dans mes explications...

Merci beaucoup pour ton aide.

Amicalement,

Rafael.


> -----Message d'origine-----
> De:	Jerome Moliere [SMTP:moliere@viveo-montpellier.com]
> Date:	mardi 11 septembre 2001 11:30
> À:	java@u-strasbg.fr
> Objet:	Re: Upload et insertion en BDD...
> 
> 
> 
> rafael.ainciart@afnor.fr wrote:
> 
> >Bonjour, 
> >Je suis nouveau dans le Java World et également nouveau parmi vous. Je
> >profite de mon premier message pour saluer tous les participants ;)
> >
> bonjour a toi...
> 
> >
> >Mon problème est le suivant :
> >Pour une application web tournant sur un serveur Netscape, je suis en
> train
> >de réaliser une servlet permettant l'upload de fichiers texte depuis
> >les postes clients (grâce à un input file accessible avec leur
> >navigateur)
> vers
> >notre serveur. Bien que peu expérimenté en Java (mais je progresse !),
> les
> >classes com.oreilly.servlet.MultipartRequest (HttpServletRequest,
> >nom_du_repertoire_tmp) m'ont bien aidé pour réaliser le composant.
> >L'upload semble bien se dérouler et le fichier est bien disponible sur
> >le serveur au final. L'objectif suivant consiste à attaquer ce fichier
> >(dont la structure est connue) pour insérer les données dans une base
> >de données Oracle. Cette solution fonctionne mais n'est pas très
> >satisfaisante et je souhaiterais pouvoir réaliser l'insertion en base
> >de données directement
> à
> >partir du flux de données de l'upload et sans passer par l'étape de
> création
> >du fichier sur le serveur. A vrai dire, je ne sais pas si cette
> >solution
> est
> >envisageable ni comment la réaliser.
> >
> comme tu la vraisemblablement compris, la methode doGet ou doPost d'une
> servlet a 2 parametres correspodant aux flux entrants et sortant .donc
> tu peux imaginer le traitement que tu veux sur le flux entrant de ta
> servlet (Request), c'est a dire a l'aide d'un iterator le parcourir, le
> stocker dans un buffer (byte ou string) puis l'envoyer via JDBC dans ta
> base Oracle...
> 
> 
> 
> Je ne sais pas ce que tu attends de plus, donc je suis a ta dispo (comme
> le restant de la liste je pense) pour plus d'infos...
> 
> Jerome
> 

     

From:           	rafael.ainciart@afnor.fr
To:             	java@u-strasbg.fr
Subject:        	RE: Upload et insertion en BDD...
Date sent:      	Tue, 11 Sep 2001 12:12:44 +0200
Send reply to:  	java@u-strasbg.fr

Salut Patrice,

 > Si les classes de O'Reilly te le permettent tu peux uploader ton
fichier non 
 > pas dans un fichier sur disque mais dans un ByteArrayOutputStream
ou un 
 > StringWriter. Ensuite tu peux parcourir le dit fichier avec un 
 > ByteArrayInputStream ou un StringReader par exemple.
Je vais vérifier cela. Ca m'intéresserait beaucoup de pouvoir parcourir ce
fichier pour en vérifier l'intégrité et insérer les différentes valeurs
séparées par des ";" dans les champs de la base. Je cours chercher des
infos sur éléments ;)

Merci de ton aide.

Rafael.


> -----Message d'origine-----
> De:	Patrice Godard [SMTP:patrice.godard@operamail.com]
> Date:	mardi 11 septembre 2001 11:35
> À:	java
> Objet:	RE: Upload et insertion en BDD...
> 
> Attention à la création d'un fichier sur le serveur.
> Il faut impérativement que ton nom de fichier soit unique si tu ne veux
> pas avoir de problèmes d'accès concurrents. Il me semble qu'il y a une
> méthode Java pour en créer un mais je ne l'ai plus en tête (help la
> liste!).
> 
> Si les classes de O'Reilly te le permettent tu peux uploader ton fichier
> non pas dans un fichier sur disque mais dans un ByteArrayOutputStream ou
> un StringWriter. Ensuite tu peux parcourir le dit fichier avec un
> ByteArrayInputStream ou un StringReader par exemple.
> 
> -------------------------------------------
> The Fastest Browser on Earth now for FREE!!
> Download Opera 5 for Windows now! Get it at
> http://www.opera.com/download/
> -------------------------------------------

     

From:           	rafael.ainciart@afnor.fr
To:             	java@u-strasbg.fr
Subject:        	RE: Upload et insertion en BDD...
Date sent:      	Tue, 11 Sep 2001 12:18:03 +0200
Send reply to:  	java@u-strasbg.fr

Salut Yohann,

Merci encore. J'ai plus d'infos que je n'en attendais ;)
 >ce que tu cherchais c'est File.createTempFile() mais il me semble
que la
 >solution envisagee de traiter le stream au fur et a mesure serait
plus
      >satisfaisant de toute facon
Effectivement, je souhaite éviter l'étape d'écriture du fichier sur le
serveur. Mais je note la méthode dont tu parles au cas où je ne pourrais
pas faire autrement.

Amicalement,

Rafael.




> -----Message d'origine-----
> De:	ROUSSEL Yohann [SMTP:yohann.roussel@criltelecom.com]
> Date:	mardi 11 septembre 2001 11:38
> À:	'java@u-strasbg.fr'
> Objet:	RE: Upload et insertion en BDD...
> 
> 
> 
> > -----Message d'origine-----
> > De : Patrice Godard [mailto:patrice.godard@operamail.com]
> > Envoyé : mardi 11 septembre 2001 11:35
> > À : java
> > Objet : RE: Upload et insertion en BDD...
> > 
> > 
> > Attention à la création d'un fichier sur le serveur.
> > Il faut impérativement que ton nom de fichier soit unique si 
> > tu ne veux pas 
> > avoir de problèmes d'accès concurrents.
> > Il me semble qu'il y a une méthode Java pour en créer un mais 
> > je ne l'ai plus 
> > en tête (help la liste!).
> 
> ce que tu cherchais c'est File.createTempFile() mais il me semble que la
> solution envisagee de traiter le stream au fur et a mesure serait plus
> satisfaisant de toute facon
> 
> > 
> > Si les classes de O'Reilly te le permettent tu peux uploader 
> > ton fichier non 
> > pas dans un fichier sur disque mais dans un 
> > ByteArrayOutputStream ou un 
> > StringWriter. Ensuite tu peux parcourir le dit fichier avec un 
> > ByteArrayInputStream ou un StringReader par exemple.
> > 
> > -------------------------------------------
> > The Fastest Browser on Earth now for FREE!!
> > Download Opera 5 for Windows now! Get it at
> > http://www.opera.com/download/
> > -------------------------------------------
> > 

     

From:           	rafael.ainciart@afnor.fr
To:             	java@u-strasbg.fr
Subject:        	RE: Upload et insertion en BDD...
Date sent:      	Tue, 11 Sep 2001 14:26:26 +0200
Send reply to:  	java@u-strasbg.fr

Salut Eric,

Ta réponse vient remettre en cause mes espoirs de parvenir mes fins en
l'état actuel des choses. Mais c'est aussi bien comme cela, tu sembles
bien connaître le problème. Comme tu le dis, je ne me sens pas capable de
réécrire complètement la classe com.oreilly.servlet.MultipartRequest mais
je vais garder cette problématique en tête parce que ca pourra être une
bonne base de travail pour espérer progresser en java. C'est un peu ardu
pour moi aujourd'hui mais j'espère être capable de le faire dans quelques
temps (je sais j'ai du boulot). Bref, je crois que l'écriture d'un fichier
sur le serveur semble indispensable dans le cadre de l'utilisation de la
classe com.oreilly.servlet.MultipartRequest et je vais donc faire contre
mauvaise fortune bon coeur en attendant d'être en mesure de développer ce
genre de classes moi même. Merci beaucoup pour tous ces renseignements.

Amicalement,

Rafael.

PS : Ta proposition de travail collaboratif m'intéresserait beaucoup mais
je crains de ne pas avoir le niveau requis. Bientôt peut être ;))


> -----Message d'origine-----
> De:	Erik Mazoyer [SMTP:erik.mazoyer@laposte.net]
> Date:	mardi 11 septembre 2001 11:58
> À:	java@u-strasbg.fr
> Objet:	Re: Upload et insertion en BDD...
> 
> La classe com.oreilly.servlet.MultipartRequest ne permet pas d'écrire
> ailleur que dans un fichier ayant comme nom celui transmit par le
> navigateur. J'ai eu le même soucis que toi, et j'ai complétement réécris
> la classe pour gérer cela sous forme de stream et de pouvoir diriger ma
> sortie vers le lieu de stockage que j'avais choisi. Cest assez complexe
> pour un débutant Java :-(
> 
> L'idée de base est de bien comprendre le strucutre des données
> "multipart/form-data" et de créer un inputstream sur chacune des données
> contenues dans données "multipart/form-data".
> 
> Il faut créer un InputStream qui sache lire un InputStream avec
> détection d'un motif de fin (car les datas dans un "multipart/form-data"
>  sont séparées par une ligne particulière). C'est assez embêtant à
> écrire :-(
> 
> Puisj'avais créé une interface DataHandler pour permettre un traitement
> à chaque découverte d'une data dans le formulaire (à l'image d'un
> org.xml.sax .ContentHandler (oublie si tu ne connais pas)).
> 
> Après cela, je pouvais utiliser les "multipart/form-data" comme il me
> plaisait, dans un Servlet ou dans mon propre serveur HTTP.
> 
> Je ne peut pas te fournir l'implémentation car je n'ai plus cette classe
> sous la main.
> 
> Maintenant, ça me semble être une classe bien utile que nous pourrions
> (les membres de la liste) écrire de concert. Reste juste à trouver un
> hébergement de notre travail. Quelqu'un a t'il une idée ?
> 
> Nous échangons souvent des solutions techniques, pourquoi ne pas
> associer un lieu de stockage des solutions partagées ?
> 
> Cordialement,
> 
> --------------------------------------------------------------------
> Erik Mazoyer, Chef de projet HyperOffice 6, rue Jacques Daguerre - 92565
> Rueil-Malmaison Cedex Tél. 01 41 96 96 76 Fax 01 41 96 96 77 Mél 
> erik.mazoyer@hyperoffice.fr
> 
> 
> ----- Original Message -----
> From: <rafael.ainciart@afnor.fr>
> To: <java@u-strasbg.fr>
> Sent: Tuesday, September 11, 2001 11:07 AM
> Subject: Upload et insertion en BDD...
> 
> 
> > Bonjour,
> > Je suis nouveau dans le Java World et également nouveau parmi vous. Je
> > profite de mon premier message pour saluer tous les participants ;)
> > Mon problème est le suivant : Pour une application web tournant sur un
> > serveur Netscape, je suis en
> train
> > de réaliser une servlet permettant l'upload de fichiers texte depuis
> > les postes clients (grâce à un input file accessible avec leur
> > navigateur)
> vers
> > notre serveur. Bien que peu expérimenté en Java (mais je progresse !),
> les
> > classes com.oreilly.servlet.MultipartRequest (HttpServletRequest,
> > nom_du_repertoire_tmp) m'ont bien aidé pour réaliser le composant.
> > L'upload semble bien se dérouler et le fichier est bien disponible sur
> le
> > serveur au final.
> > L'objectif suivant consiste à attaquer ce fichier (dont la structure
> > est connue) pour insérer les données dans une base de données Oracle.
> > Cette solution fonctionne mais n'est pas très satisfaisante et je
> > souhaiterais pouvoir réaliser l'insertion en base de données
> > directement
> à
> > partir du flux de données de l'upload et sans passer par l'étape de
> création
> > du fichier sur le serveur. A vrai dire, je ne sais pas si cette
> > solution
> est
> > envisageable ni comment la réaliser.
> >
> > Auriez vous une idée sur la méthode à utiliser pour parvenir au
> > résultat attendu ?
> >
> > Je tiens à votre disposition les extraits de code qui vous seraient
> > nécessaires pour m'aider.
> >
> > Merci d'avance.
> > Amicalement,
> >
> > Rafael.
> >
> >
> >
> >
> >
> >

C'est fini ! Retour à l'accueil de la pseudo-archive