Fail при скачивании файла с помощью CFContent
С помощью Coldfusion очень легко организовать файловое хранилище с функцией поиска. Coldfusion без труда может проиндексировать PDF и другие документы с помощью Verity или Solr, может поработать с картинками с помощью CFImage и покопаться в метаданных, может даже вытащить теги из MP3 записей. Однако, проблема может ждать там где не ожидаешь - Coldfusion пасует при скачивании больших файлов (больше 1ГБ).
Организовать процесс скачивания файла, да еще спрятать настоящее размещение (название) файла можно двумя строчками:
<cfheader name="Content-Disposition" value="attachment; filename="someothername.avi" />
<cfcontent file="c:/somefile.avi" />
Однако, этот простейший код оказывается весьма прожорливым, когда речь идет о скачивании больших файлов. При скачивании 100МБ файлов никаких трудностей не возникло. При этом, вместо ожиданного видео-файла размером 1ГБ, я смотрел на "Ошибку 500, сервис недоступен". Coldfusion занимал в памяти около 450МБ в состоянии покоя. График потребление памяти таков:

Попробовал перегрузить сервис, в надежде что он освободит немного памяти, но безрезультатно:

Потом немного прибавил памяти виртуальной Java-машине, с 512МБ по-умолчанию до 768МБ. Не помогло.

Тестировалось на первом официальном релизе Coldfusion 9.0.0.251028, под Windows Vista, на компьютере с 2-ядерным процессором и 2ГБ оперативки. Тестировалось на J2EE инсталляции Coldfusion + Glassfish, а также на чистом обычном Coldfusion (JRun). В качестве веб-сервера выступали и IIS и Apache.
Решения проблемы скачивания 1ГБ файлов у меня пока нет. Могу сказать одно - Railo 3.1 установленный на Tomcat 6 справился с задачей на отлично - при этом потребление памяти выросло с 37 до 42 МБ...
2 Відгуки
Родион написав 03/29/10 5:29 PM
А пока телепатически в мозг не получается заливать :)Например библиотека секретных файлов, через cfheader даем файлу новое имя, а через cfcontent выливаем в браузер из безопасного хранилища. Ну или контент который собирается под конкретного пользователя каждый раз... Вобщем пока дальше не могу придумать.
Западные блоггеры пишут что cfcontent работает так хорошо аж пыльца летит, а я вот попробовал и ничего не работает как надо...

inj написав 03/26/10 4:59 PM
У меня простой вопрос: а зачем таким образом вообще распространять контент?