Précédent   Forum des professionnels en informatique > Webmasters - Développement Web > Autres langages pour le Web > Coldfusion
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 21/09/2007, 08h15   #1
Membre régulier
 
Homme
Inscription : décembre 2002
Messages : 86
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations forums :
Inscription : décembre 2002
Messages : 86
Points : 91
Points : 91
Par défaut Mettre un lien Download sur données Clob provenant Base Oracle

Bonjour

Mon niveau en ColdFusion date d'hier et
je suis plutôt mainframiste d'habitude so ...

Voici ma question :
Je récupère un champ Clob de ma base de données Oracle
et je veux niveau affichage mettre un lien sur ce Clob (dont le
contenu pourrait ête n'importe quoi (.xls, .doc, .txt ...)

Comme puis-je m'y prendre ?
Puis-je faire ça d'un coup, ou dois-je décharger ce Clob dans un fichier
temporaire puis mettre un lien Download qui point sur ce fichier
temporaire ?


Important : La version sur mon serveur de Cold Fusion est la 6.1

Merci pour toute réponse
Laurent
__________________
PT, ROT, VTT
vttman est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/09/2007, 14h07   #2
Membre du Club
 
Inscription : septembre 2006
Messages : 81
Détails du profil
Informations forums :
Inscription : septembre 2006
Messages : 81
Points : 63
Points : 63
Envoyer un message via Skype™ à cchevalier72
Bonjour,

pour le cloc, blob avec Oracle, nous avons mis en place une solution avec JDBC, mais en version CF7. Cela doit aussi fonctionner avec la version 6.1. On peut utiliser les deux manières, soit en directe soit avec un fichier temp. L'avantage de ne pas avoir un fichier temporaire est de ne pas laisser de trace (lien) qui pourrait être ouvert par une autre personne par exemple.

Il suffit de prendre le contenu, le mettre dans une var, de faire un cfoutput en ayant changé l'entête (MIME) selon le type de fichier. Si tu désires des détails, je peux te filler qq source que nous utilisons, mais dans les grandes lignes c'est ça.

Fais moi signe durant la semaine, j'ai pas de source avec moi aujourd'hui.
Christophe
cchevalier72 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/09/2007, 09h01   #3
Membre régulier
 
Homme
Inscription : décembre 2002
Messages : 86
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations forums :
Inscription : décembre 2002
Messages : 86
Points : 91
Points : 91


=>

Je t'ai répondu par message privé
__________________
PT, ROT, VTT
vttman est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/09/2007, 10h27   #4
Membre du Club
 
Inscription : septembre 2006
Messages : 81
Détails du profil
Informations forums :
Inscription : septembre 2006
Messages : 81
Points : 63
Points : 63
Envoyer un message via Skype™ à cchevalier72
OK,

Voici un bout de code pour sortir du texte brut d'un blob. Nous avons donc une table dans un DB Oracle 10g qui contient entre autre un champ Blob (colv_blob). Pour chaque fichier nous gardons le nom du fichier au moment de l'upload dans la base et nous avons une liste de mime type dans une autre table (pas dans l'exemple). A chaque demande de fichier, nous chargeons le blob, on le converti en string car il est uploader dans la base en binary.

C'est un exemple simple, mais comme tout notre développement est dans des objets, cela sera un peu long et compliqué à expliquer. J'ai donc préféré refaire un petit bout de code sur notre base.

Ce qu'il reste donc à gérer, c'est effectivement les types MIME, faire attention au header, comme on redéfini celui-ci, il ne doit contenir que des données du type. Si par exemple le debug reste actif pour un fichier PDF, cela ne fonctionnera pas.

Nous utilisons une connexion à la db oracle via JDBC, il faut faire attention avec le version de JDBC (la dernière version convient très bien), sinon on est limité avec la taille et surtout ne pas oublier de cocher les cases Blob et Clob dans l'administration de Coldfusion sur la datasource.

Voilà à ta disposition si tu as d'autre question.
Christophe

Code :
1
2
3
4
5
6
7
8
<cfsetting showdebugoutput="false">
<cfquery name="qSelectBlob" datasource="#APPLICATION.DSN#">
	SELECT * FROM t_co_cont_lang_vers WHERE colv_id_cont = 6
</cfquery>
<cfheader name="Content-Type" value = "text/html">
<cfheader name="Content-Disposition" value="inline; filename=#qSelectBlob.colv_fich_name#"> 
<cfheader name="Content-length" value="#len(qSelectBlob.colv_blob)#">
<cfoutput>#toString(qSelectBlob.colv_blob)#</cfoutput>
cchevalier72 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/09/2007, 08h43   #5
Membre régulier
 
Homme
Inscription : décembre 2002
Messages : 86
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations forums :
Inscription : décembre 2002
Messages : 86
Points : 91
Points : 91
Suite ...
Merci tout d'abord pour ce bout de code !

Alors ce que je rencontre maintenant comme pb c'est que mon fichier
attaché une fois downloadé de ma base Oracle est illisible , ou plutôt il contient dans son ensemble ce type de données => '... 1626C65207265706F7274730D0A0D0 ...'
Note : à la base c'était un TXT ...

J'ai pourtant bien effectué un toString du Clob, maintenant c'est peut-être
au stockage (insertion) de mes données en Base que j'ai loupé
quelque chose ?


Code :
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
<form name="form1" method="post" EncType="multipart/form-data">		


			<cfsetting showdebugoutput="false">
			<cfquery name="qyAttach" Datasource="#Request.Dsn#" >
					 SELECT  Attachment , Attachment_name 
						 FROM MaTable
						WHERE Seq = '#Seq#'
			</cfquery>
                	<cfheader name="Content-Type" value = "text/html">
                	<cfheader name="Content-Disposition" value="inline; filename=#qyAttach.Attachment_name#"> 
                	<cfheader name="Content-length" value="#len(qyAttach.Attachment)#">

	        	<cfoutput query="qyAttach">
				<cfset vAttachment      = #Attachment#>
				<cfset vAttachment_name = #Attachment_name#>
			</cfoutput> 


			<!-- Set the file names for the downloaded Attach -->
			<cfset vInternalFile = "/ec/production/app/doc/work/download/"& #qyAttach.Attachment_name#>
			<cfset vExternalFile = #qyAttach.Attachment_name#>	
	
			<input type="hidden" name="hidInternalFile" <cfoutput>value='#vInternalFile#'</cfoutput>> 
			<input type="hidden" name="hidExternalFile" <cfoutput>value='#vExternalFile#'</cfoutput>> 

			<!-- Create the file  -->
			<cfif isdefined("vAttachment") and #vAttachment# neq "">
				<cffile action = "write"
								file   = "#vInternalFile#"
								output = "#toString(qyAttach.Attachment)#">	
			</cfif>
	
				
			<!-- Display a button that enables the user to manually download if the automatic download --> 
			<!-- doesnt't work                                                                      -->
			<cfoutput>
				<div align="center">Click on the download button if the download does not work.
				  <br>
				  <br>
				  <br>
				  <input type="button" style="WIDTH: 70px" name="btDownload" value="Download" class="but1" onClick="Javascript: ProcessDownload();">
			    <input type="button" style="WIDTH: 70px" name="btClose" value="Close" class="but1" onClick="Javascript: window.close();">
			  </div>
			</cfoutput>
		</form>
__________________
PT, ROT, VTT
vttman est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/09/2007, 08h53   #6
Membre régulier
 
Homme
Inscription : décembre 2002
Messages : 86
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations forums :
Inscription : décembre 2002
Messages : 86
Points : 91
Points : 91
je joins l'Insert , ça peu aider à comprendre mon pb


INSERT INTO MaTable
(SEQ,ATTACHMENT,ATTACHMENT_NAME,...)
values (
#QRY_SEQ.seq_request#,
<cfqueryparam value="#file_blob#" cfsqltype="cf_sql_blob">,
'#v_attachment_name#', ...
__________________
PT, ROT, VTT
vttman est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/09/2007, 10h41   #7
Membre du Club
 
Inscription : septembre 2006
Messages : 81
Détails du profil
Informations forums :
Inscription : septembre 2006
Messages : 81
Points : 63
Points : 63
Envoyer un message via Skype™ à cchevalier72
Alors cela peut sembler un peu bizarre, mais après plusieurs essais, la meilleure manière que l'on a trouvé pour traiter tous les cas est le code suivant pour l'insert. Sans cette multitude de conversion, on n'avait chaque fois un problème avec certain type de fichier (pdf, exe, jpg, txt, html) cela fonctionne bien comme cela chez nous.

Code :
<cfqueryparam value="#toBinary(toBase64(toString(COLV_BLOB)))#" cfsqltype="cf_sql_blob">
cchevalier72 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/09/2007, 08h27   #8
Membre régulier
 
Homme
Inscription : décembre 2002
Messages : 86
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations forums :
Inscription : décembre 2002
Messages : 86
Points : 91
Points : 91
Merci pour tes bonnes remarques

Et particulièrement celle de l'administration ColFusion sur clob et blob

It's working now !
__________________
PT, ROT, VTT
vttman est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 03h56.


 
 
 
 
Partenaires

Hébergement Web