2009-09-17 2 views
2

Я пытаюсь сохранить файл (pdf или изображение), загруженный из формы в базу данных MySQL, используя Coldfusion. Я сохраняю файл как двоичные данные в базе данных, которая имеет настройку столбца как BLOB, но не удается записать файл обратно на экран. Каков правильный способ сохранить файл в базе данных, а затем восстановить файл в Coldfusion? Примечание. Клиент хочет файлы, хранящиеся в базе данных, а не в файловой системе.Сохранить файл в MySQL с помощью Coldfusion

Сохранение файла в коде базы данных

<cffile action="upload" filefield="form.file_upload" destination="#fileDirectory#" result="file_result" nameconflict="makeunique"> 

<cfif #file_result.fileWasSaved# IS 'Yes'> 
    <cfset title = Evaluate('form.file_title')> 

    <cffile action="readbinary" file="#fileDirectory#/#file_result.serverFile#" variable="file_binary_data"> 

    <cfquery name="insertFile" datasource="#request.app.datasource#"> 
    INSERT INTO (table) (form_id, file_name, file_info) 
    VALUES ('#form_id#', <cfqueryparam value="#title#" cfsqltype="CF_SQL_VARCHAR">, <cfqueryparam value="#file_binary_data#" cfsqltype="CF_SQL_BLOB">) 
    </cfquery> 

Запись файла обратно на экран

<cfheader name="content-length" value="#ArrayLen(getFile.file_info)#" /> 
<cfheader name="content-disposition" value="inline; filename=#getFile.file_name#.gif" /> 
<cfcontent type="image/*" variable="#getFile.file_info#"> 

ответ

5

Во-первых, убедитесь, что вы включили BLOB в настройках расширенного подключения к DB в Administrator или что буфер достаточно велик, чтобы заботиться о изображениях.

Во-вторых, я бы попробовал провести тестирование только изображение вместо того, чтобы писать его на странице, чтобы увидеть, каков результат на самом деле.

+0

Спасибо, увеличив буфер в MySQL и обновив dsn в Coldfusion, чтобы принять BLOB-файлы, заработал! –

1

Я бы рекомендовал хранить файл в файловой системе, и сохранение файла в базе данных. База данных оптимизирована для хранения и получения значений фиксированной ширины; хранение огромных файлов там неэффективен.

+0

Обычно я бы хранил в файловой системе, но клиент хочет файлы, хранящиеся в базе данных. –

+0

Вы говорили с клиентом, чтобы объяснить причины хранения имен файлов вместо двоичных данных? –