summaryrefslogtreecommitdiff
path: root/includes/file.inc
diff options
context:
space:
mode:
authorDries Buytaert <dries@buytaert.net>2010-10-18 01:00:39 +0000
committerDries Buytaert <dries@buytaert.net>2010-10-18 01:00:39 +0000
commit63c15e549005f5d49dfb4cc6ff3e0c6eb5b7f11d (patch)
treecb5d909744ce5beb5c6137a1fea1a0b93c2f97f3 /includes/file.inc
parent468d201ce1e6908cfb565860a888bdae648010bf (diff)
downloadbrdo-63c15e549005f5d49dfb4cc6ff3e0c6eb5b7f11d.tar.gz
brdo-63c15e549005f5d49dfb4cc6ff3e0c6eb5b7f11d.tar.bz2
- Patch #943112 by ksenzee: file_file_download() should delegate header checks to a separate function.
Diffstat (limited to 'includes/file.inc')
-rw-r--r--includes/file.inc29
1 files changed, 29 insertions, 0 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".
*/