Создание страницы загрузки в ColdFusion 8

У меня есть приложение, которое позволяет администраторам загружать файлы. Эти файлы хранятся за пределами веб-корня, таким образом, они не доступны через URL. В прошлом мы всегда использовали код, подобный ниже, чтобы затем служить файлу назад авторизованным пользователям. Существует ли лучший или более универсальный способ указать тип? Это особенно релевантно, когда администраторам разрешают загрузить много различных типов файлов.

<cfheader name="content-disposition" value="filename=#queryname.filename#">
<cfcontent type="application/unknown" file="#application.pathToDataDirectory#/#queryname.filename#">
7
задан Jason 20 January 2010 в 16:02
поделиться

2 ответа

Насколько я знаю, я не думаю, что в любом виде файла есть настоящий файл «MIME-Type». Это просто то, что дает браузер предупреждение о том, что идет на свой путь.

Здесь упоминается несколько функций «Smart Mime-Type» (нотайте также второй комментарий). Я не пробовал их, но они должны удовлетворить ваши потребности: http://www.choldfusionmuse.com/index.cfm/2006/8/2/mime.types

Если вы хотели написать свой собственный » Умный тип MIME-Type ", вы можете легко преобразовать эту функцию PHP в ColdFusion: http://snipplr.com/view/11451/get-file-mimetype/

6
ответ дан 7 December 2019 в 07:45
поделиться

Несколько запоздалый, но почему бы вам не захватить и сохранить тип MIME, когда файл загружен? возвращает его в CFFILE.Contenttype и CFFILE.ContententsUbType , поэтому он не совсем обресен. Конечно, вам нужно будет запустить развертки на ранее существующих файлах, но это легко сценарируется снимка.

FWIW, мой код загрузки файлов также отправляет размер файла и модифицированную дату и проверяет повторные запросы на немодифицированные файлы. Все это после проверки аутентификации / авторизации, конечно:

<cfset modified=parsedatetime(queryname.datestamp)/>

<cfif structkeyexists(cgi, "http_if_modified_since")>
 <cfif parsedatetime(cgi.http_if_modified_since) gt modified>
  <cfheader statuscode=304 statustext="Not modified"/>
  <cfabort/>
 </cfif>
</cfif>

<cfheader name="Content-Disposition" value='disposition=#disposition#; filename="#queryname.filename#"'/>
<cfheader name="Content-Length" value=#queryname.size#/>
<cfheader name="Last-Modified" value=#gethttptimestring(modified)#/>
<cfcontent type=#queryname.mimetype# file="application.pathToDataDirectory/#queryname.filename#"/>
1
ответ дан 7 December 2019 в 07:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: