Как доставить большой файл с помощью Coldfusion 8?

Я использую Coldfusion 8 и пытаюсь передать файл 15mo с cf_content. Проблема в том, что загрузка зависает случайным образом. На данный момент пробовал только локально, поэтому проблема не в сети. Я пробовал с меньшими файлами, и зависания случаются реже. Я понятия не имею, в чем корень проблемы. Вот мой код холодного сплава:

<cfheader name="Content-Disposition" value="attachment; filename=test.zip">
<cfcontent type="application/zip" file="C:\Test.zip" deletefile="no">

Я попытался загрузить файл с помощью Chrome, IE и фрагмента кода Java для загрузки файла (зависание на методе чтения после некоторой итерации).

У вас есть какие-либо идеи о том, как я могу легко передать файл с помощью Coldfusion? Возможно, это возможно с использованием пользовательских тегов Java, но как записать байты на страницу, поскольку метод записи настраиваемого тега объекта Response позволяет записывать только строку?


person Abbadon    schedule 10.05.2013    source источник
comment
Вы имели в виду 15 Мб? Используете ли вы общую/размещенную среду? Какой веб-сервер вы используете с ColdFusion?   -  person Miguel-F    schedule 10.05.2013
comment
Вы пытались поместить файл в веб-пространство и загрузить его без cfcontent, просто в качестве теста, используя domain.com/test.zip?   -  person Travis    schedule 10.05.2013
comment
Вы также можете рассмотреть mod_xsendfile, если вы используете Apache   -  person Henry    schedule 11.05.2013
comment
@ Miguel-F Я действительно имею в виду 15 мг. Я не использую общую/размещенную среду и использую JRun. Он работает без проблем, когда я загружаю файл напрямую.   -  person Abbadon    schedule 11.05.2013


Ответы (2)


Я сделал это для клиента. Я собираю ряд документов и архивирую их для скачивания. Вместо потоковой передачи я сохраняю zip-файл на сервере:

<cfzip action="zip" file="#expandpath('/data/briefcase/')##session.order_id#.zip" source="#expandpath('/data/briefcase/')##session.order_id#" overwrite="yes" storepath="no">

Затем я предоставляю пользователю ссылку для скачивания файла. Таким образом, если это не удастся, они всегда смогут повторить попытку.

Затем я написал запланированную задачу, которая запускается каждый день и удаляет все zip-файлы старше 24 часов.

    <cfdirectory action="list" directory="#expandpath('/data/briefcase/')#" name="filelist" >
    <cfquery name="filter_file" dbtype="query" >
    SELECT * from filelist WHERE datelastmodified < #dateadd("h", -48, now())# AND type = 'File'
</cfquery>
    <cfquery name="filter_dir" dbtype="query" >
    SELECT * from filelist WHERE datelastmodified < #dateadd("h", -48, now())# AND type = 'Dir'
</cfquery>
    <cfset path = expandpath('/data/briefcase/')>

    <cfoutput query="filter_file">  
    <cfif fileexists('#directory#/#name#')>
        <cffile action="delete" file="#directory#/#name#" >
    </cfif>
</cfoutput>
<cfoutput query="filter_dir">
    <cfif directoryexists('#directory#/#name#')>
        <cfdirectory action="delete" directory="#directory#/#name#" recurse="true" >
    </cfif>
</cfoutput>
person Sollinger04    schedule 10.05.2013
comment
Можно было бы использовать это решение, но я хотел бы передать файл в потоковом режиме. Это возможно? - person Abbadon; 11.05.2013

Посмотрите, поможет ли добавить ваш код:

<cfheader name="Content-Length" value="#GetFileInfo('C:\Test.zip').size#">

Это говорит браузеру, сколько данных ожидать.

person Jonas Meller    schedule 12.05.2013