]> source.dussan.org Git - nextcloud-server.git/commitdiff
Send gallery album thumbnail with OC_Response::sendFile
authorBart Visscher <bartv@thisnet.nl>
Mon, 13 Feb 2012 22:35:33 +0000 (23:35 +0100)
committerBart Visscher <bartv@thisnet.nl>
Mon, 13 Feb 2012 22:35:37 +0000 (23:35 +0100)
apps/gallery/ajax/galleryOp.php
lib/image.php
lib/response.php

index 9273de2599d9827888a10e8a13747a55948cdae6..5ac6d295108be5a395c36c2b8976201fd313d7b4 100644 (file)
@@ -41,9 +41,9 @@ function handleRemove($name) {
 
 function handleGetThumbnails($albumname) {
   OC_Response::enableCaching(3600 * 24); // 24 hour
-  $photo = new OC_Image();
-  $photo->loadFromFile(OC::$CONFIG_DATADIRECTORY.'/../gallery/'.$albumname.'.png');
-  $photo->show();
+  $thumbnail = OC::$CONFIG_DATADIRECTORY.'/../gallery/'.$albumname.'.png';
+  header('Content-Type: '.OC_Image::getMimeTypeForFile($thumbnail));
+  OC_Response::sendFile($thumbnail);
 }
 
 function handleGalleryScanning() {
index df8f76352a0e8f6ebca573eca5f96dc4e95c943f..b1d3a14f4159e828cc385aa131eabc3114641989 100644 (file)
@@ -48,6 +48,11 @@ class OC_Image {
        protected $imagetype = IMAGETYPE_PNG; // Default to png if file type isn't evident.
        protected $filepath = null;
 
+       static public function getMimeTypeForFile($filepath) {
+               $imagetype = exif_imagetype($filepath);
+               return $imagetype ? image_type_to_mime_type($imagetype) : '';
+       }
+
        /**
        * @brief Constructor.
        * @param $imageref The path to a local file, a base64 encoded string or a resource created by an imagecreate* function.
index a768366b02c2e1c3d4f153914e9726954875bd1c..f47534aeefb3d4939dce63c7ec367d12aba36d11 100644 (file)
@@ -10,6 +10,7 @@ class OC_Response {
        const STATUS_FOUND = 304;
        const STATUS_NOT_MODIFIED = 304;
        const STATUS_TEMPORARY_REDIRECT = 307;
+       const STATUS_NOT_FOUND = 404;
 
        static public function enableCaching($cache_time = null) {
                if (is_numeric($cache_time)) {
@@ -47,6 +48,9 @@ class OC_Response {
                        case self::STATUS_FOUND;
                                $status = $status . ' Found';
                                break;
+                       case self::STATUS_NOT_FOUND;
+                               $status = $status . ' Not Found';
+                               break;
                }
                header($protocol.' '.$status);
        }
@@ -85,6 +89,9 @@ class OC_Response {
                if (empty($lastModified)) {
                        return;
                }
+               if (is_int($lastModified)) {
+                       $lastModified = gmdate(DateTime::RFC2822, $lastModified);
+               }
                if ($lastModified instanceof DateTime) {
                        $lastModified = $lastModified->format(DateTime::RFC2822);
                }
@@ -95,4 +102,18 @@ class OC_Response {
                }
                header('Last-Modified: '.$lastModified);
        }
+
+       static public function sendFile($filepath=null) {
+               $fp = fopen($filepath, 'rb');
+               if ($fp) {
+                       self::setLastModifiedHeader(filemtime($filepath));
+                       self::setETagHeader(md5_file($filepath));
+
+                       header('Content-Length: '.filesize($filepath));
+                       fpassthru($fp);
+               }
+               else {
+                       self::setStatus(self::STATUS_NOT_FOUND);
+               }
+       }
 }