У меня есть приложение, которое позволяет администраторам загружать файлы. Эти файлы хранятся за пределами веб-корня, таким образом, они не доступны через URL. В прошлом мы всегда использовали код, подобный ниже, чтобы затем служить файлу назад авторизованным пользователям. Существует ли лучший или более универсальный способ указать тип? Это особенно релевантно, когда администраторам разрешают загрузить много различных типов файлов.
<cfheader name="content-disposition" value="filename=#queryname.filename#">
<cfcontent type="application/unknown" file="#application.pathToDataDirectory#/#queryname.filename#">
Насколько я знаю, я не думаю, что в любом виде файла есть настоящий файл «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/
Несколько запоздалый, но почему бы вам не захватить и сохранить тип 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#"/>