2010-03-07 17 views
3

Je souhaite simplement télécharger un fichier dans ma base de données à l'aide de ColdFusion. Je comprends comment télécharger une image dans un répertoire, mais je voudrais le placer directement dans la base de données.Télécharger un fichier dans une base de données dans ColdFusion

J'ai défini un champ de base de données à varbinary (MAX) pour accepter l'image et avoir la procédure stockée pour l'insérer. À l'heure actuelle mon code pour télécharger l'image à mon système de fichiers est:

<cfif isdefined("form.FileUploadImage")> 
      <cffile action="upload" filefield="FileUploadImage" destination="#uploadfolder#" nameconflict="overwrite" accept="image/*" > 
</cfif> 

J'ai évidemment laissé une partie du code de soutien, mais vraiment tout ce que je dois faire est d'obtenir une représentation binaire du fichier stocké dans la mémoire , au lieu du système de fichiers.

Des experts qui peuvent aider?

Merci, George

Répondre

6

Quelque chose comme ça?

<cfquery> 
    INSERT INTO Image (Jpg) 
    VALUES (
    <cfqueryparam CFSQLType="CF_SQL_BLOB" 
        value="#ToBase64(FileReadBinary(uploadedFilePath))#"> 
</cfquery> 

plus tard si vous voulez diffuser l'image au navigateur, utilisez <cfimage> (CF8 +)

+0

Y at-il de toute façon à Ignorer l'enregistrement de l'image dans le système de fichiers? C'est vraiment mon vrai but. –

+0

pas vraiment, sauf si vous utilisez le système de fichiers virtuel (disque RAM) dans CF9. – Henry

+0

C'est ce dont j'avais peur. Appréciez-le bien! –

4

La façon de contourner l'enregistrement de fichiers au système de fichiers:

<cfqueryparam cfsqltype="cf_sql_blob" 
       value="#FileReadBinary(FORM.FileUploadImage)#"> 
+0

Cela a fonctionné pour moi dans ACF10; J'ai observé que la valeur du champ FORM est un chemin CF interne, tel que: C: \ ColdFusion10 \ cfusion \ runtime \ travail \ Catalina \ localhost \ tmp \ neotmp8293497696930332477.tmp –