diff options
-rw-r--r-- | includes/file.inc | 29 | ||||
-rw-r--r-- | modules/file/file.module | 20 |
2 files changed, 31 insertions, 18 deletions
diff --git a/includes/file.inc b/includes/file.inc index 1dd34cbae..588bea086 100644 --- a/includes/file.inc +++ b/includes/file.inc @@ -2329,5 +2329,34 @@ function file_directory_temp() { } /** + * 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". */ diff --git a/modules/file/file.module b/modules/file/file.module index 69130b2f8..08b383555 100644 --- a/modules/file/file.module +++ b/modules/file/file.module @@ -216,24 +216,8 @@ function file_file_download($uri, $field_type = 'file') { } // Access is granted. - $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', - ); + $headers = file_get_content_headers($file); + return $headers; } /** |