From 63c15e549005f5d49dfb4cc6ff3e0c6eb5b7f11d Mon Sep 17 00:00:00 2001 From: Dries Buytaert Date: Mon, 18 Oct 2010 01:00:39 +0000 Subject: - Patch #943112 by ksenzee: file_file_download() should delegate header checks to a separate function. --- includes/file.inc | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) (limited to 'includes') diff --git a/includes/file.inc b/includes/file.inc index 1dd34cbae..588bea086 100644 --- a/includes/file.inc +++ b/includes/file.inc @@ -2328,6 +2328,35 @@ function file_directory_temp() { return $temporary_directory; } +/** + * Examines a file object and returns appropriate content headers for download. + * + * @param $file + * A file object. + * @return + * An associative array of headers, as expected by file_transfer(). + */ +function file_get_content_headers($file) { + $name = mime_header_encode($file->filename); + $type = mime_header_encode($file->filemime); + // Serve images, text, and flash content for display rather than download. + $inline_types = variable_get('file_inline_types', array('^text/', '^image/', 'flash$')); + $disposition = 'attachment'; + foreach ($inline_types as $inline_type) { + // Exclamation marks are used as delimiters to avoid escaping slashes. + if (preg_match('!' . $inline_type . '!', $file->filemime)) { + $disposition = 'inline'; + } + } + + return array( + 'Content-Type' => $type . '; name="' . $name . '"', + 'Content-Length' => $file->filesize, + 'Content-Disposition' => $disposition . '; filename="' . $name . '"', + 'Cache-Control' => 'private', + ); +} + /** * @} End of "defgroup file". */ -- cgit v1.2.3