views:

289

answers:

2

I simply would like to upload a file to my database using ColdFusion. I understand how to upload an image to a directory, but I would like to place it directly in the database.

I have set a database field to varbinary(MAX) to accept the image and have the stored procedure to insert it. Currently my code for uploading the image to my file system is:

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

I've obviously left some of the supporting code out, but really all I need to do is get a binary representation of the file stored in memory, instead of the file system.

Any experts out there that can help?

Thanks, George

+5  A: 

Something like this?

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

Later if you want to stream the image back to the browser, use <cfimage> (CF8+)

Henry
Is there anyway to bypass saving the image to the file system? That's really my true goal.
George
not really, unless you use Virtual File System (RAM Disk) in CF9.
Henry
That's what I was afraid of. Appreciate it though!
George
A: 

The way to bypass saving file to the file system:

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