Browse Source

Scale previews for better performances
Small fixes

Sergio Brighenti 7 years ago
parent
commit
00d12b5012

+ 25 - 8
app/Controllers/UploadController.php

@@ -214,14 +214,31 @@ class UploadController extends Controller
 	protected function streamMedia(Filesystem $storage, $media, string $disposition = 'inline'): void
 	{
 		try {
-			Flight::response()->header('Content-Type', $storage->getMimetype($media->storage_path));
-			Flight::response()->header('Content-Disposition', $disposition . ';filename="' . $media->filename . '"');
-			Flight::response()->header('Content-Length', $storage->getSize($media->storage_path));
-
-			Flight::response()->sendHeaders();
-			ob_end_clean();
-
-			fpassthru($storage->readStream($media->storage_path));
+			$mime = $storage->getMimetype($media->storage_path);
+			$query = Flight::request()->query;
+
+			if ($query['width'] !== null && explode('/', $mime)[0] === 'image') {
+				Flight::response()->header('Content-Type', 'image/png');
+				Flight::response()->header('Content-Disposition', $disposition . ';filename="scaled-' . pathinfo($media->filename)['filename'] . '.png"');
+				Flight::response()->sendHeaders();
+				ob_clean();
+
+				$image = imagecreatefromstring($storage->read($media->storage_path));
+				$scaled = imagescale($image, $query['width'], $query['height'] !== null ? $query['height'] : -1);
+
+				imagedestroy($image);
+
+				imagepng($scaled, null, 9);
+				imagedestroy($scaled);
+			} else {
+				Flight::response()->header('Content-Type', $mime);
+				Flight::response()->header('Content-Disposition', $disposition . ';filename="' . $media->filename . '"');
+				Flight::response()->header('Content-Length', $storage->getSize($media->storage_path));
+				Flight::response()->sendHeaders();
+				ob_end_clean();
+
+				fpassthru($storage->readStream($media->storage_path));
+			}
 		} catch (FileNotFoundException $e) {
 			Flight::error($e);
 		}

+ 4 - 4
bin/migrate

@@ -24,9 +24,9 @@ if (!file_exists($config['db']['dsn']) && DB::driver() === 'sqlite') {
 }
 
 try {
-    DB::query('SELECT 1 FROM `migrations` LIMIT 1');
-} catch (PDOException $exception){
-    $firstMigrate = true;
+	DB::query('SELECT 1 FROM `migrations` LIMIT 1');
+} catch (PDOException $exception) {
+	$firstMigrate = true;
 }
 
 echo 'Connected.' . PHP_EOL;
@@ -83,7 +83,7 @@ foreach ($files as $file) {
 }
 
 if (isset($argv[1]) && $argv[1] === '--install') {
-    DB::query("INSERT INTO `users` (`email`, `username`, `password`, `is_admin`) VALUES ('admin@example.com', 'admin', '$2y$10$bd.G9pr4C.CnX6T5GItV9OAvylOAhBgZor8YsrCdAnqfcK6aHdGhC', 1);");
+	DB::query("INSERT INTO `users` (`email`, `username`, `password`, `is_admin`) VALUES ('admin@example.com', 'admin', ?, 1)", password_hash('admin', PASSWORD_DEFAULT));
 }
 
 echo 'Done.' . PHP_EOL;

+ 11 - 12
composer.lock

@@ -4,7 +4,6 @@
         "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file",
         "This file is @generated automatically"
     ],
-    "hash": "0c95f83d59a7abaf057356959707e765",
     "content-hash": "a89ea5afa20682a68557acba9279184d",
     "packages": [
         {
@@ -89,7 +88,7 @@
                 "sftp",
                 "storage"
             ],
-            "time": "2018-04-06 09:58:14"
+            "time": "2018-04-06T09:58:14+00:00"
         },
         {
             "name": "mikecao/flight",
@@ -132,7 +131,7 @@
             ],
             "description": "Flight is a fast, simple, extensible framework for PHP. Flight enables you to quickly and easily build RESTful web applications.",
             "homepage": "http://flightphp.com",
-            "time": "2017-10-20 01:46:56"
+            "time": "2017-10-20T01:46:56+00:00"
         },
         {
             "name": "monolog/monolog",
@@ -210,7 +209,7 @@
                 "logging",
                 "psr-3"
             ],
-            "time": "2017-06-19 01:22:40"
+            "time": "2017-06-19T01:22:40+00:00"
         },
         {
             "name": "psr/log",
@@ -257,20 +256,20 @@
                 "psr",
                 "psr-3"
             ],
-            "time": "2016-10-10 12:19:37"
+            "time": "2016-10-10T12:19:37+00:00"
         },
         {
             "name": "symfony/polyfill-mbstring",
-            "version": "v1.7.0",
+            "version": "v1.8.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/polyfill-mbstring.git",
-                "reference": "78be803ce01e55d3491c1397cf1c64beb9c1b63b"
+                "reference": "3296adf6a6454a050679cde90f95350ad604b171"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/78be803ce01e55d3491c1397cf1c64beb9c1b63b",
-                "reference": "78be803ce01e55d3491c1397cf1c64beb9c1b63b",
+                "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/3296adf6a6454a050679cde90f95350ad604b171",
+                "reference": "3296adf6a6454a050679cde90f95350ad604b171",
                 "shasum": ""
             },
             "require": {
@@ -282,7 +281,7 @@
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "1.7-dev"
+                    "dev-master": "1.8-dev"
                 }
             },
             "autoload": {
@@ -316,7 +315,7 @@
                 "portable",
                 "shim"
             ],
-            "time": "2018-01-30 19:27:44"
+            "time": "2018-04-26T10:06:28+00:00"
         },
         {
             "name": "twig/twig",
@@ -382,7 +381,7 @@
             "keywords": [
                 "templating"
             ],
-            "time": "2018-04-02 09:24:19"
+            "time": "2018-04-02T09:24:19+00:00"
         }
     ],
     "packages-dev": [],

+ 1 - 2
resources/templates/dashboard/admin.twig

@@ -30,7 +30,7 @@
                                     <td>
                                         {% if media.mimetype starts with 'image' %}
                                             {% if media.username is not null %}
-                                                <img src="{{ config.base_url }}/{{ media.user_code }}/{{ media.code }}.{{ media.extension }}/raw"
+                                                <img src="{{ config.base_url }}/{{ media.user_code }}/{{ media.code }}.{{ media.extension }}/raw?width=128"
                                                      class="img-fluid rounded admin-img">
                                             {% else %}
                                                 <img src="{{ config.base_url }}/upload/{{ media.id }}/raw" class="img-fluid rounded admin-img">
@@ -67,7 +67,6 @@
                                         </div>
                                     </td>
                                 </tr>
-                                {% flush %}
                             {% endfor %}
                             </tbody>
                         </table>

+ 1 - 2
resources/templates/dashboard/home.twig

@@ -16,7 +16,7 @@
                         <div class="card mb-4 box-shadow">
                             {% if media.mimetype starts with 'image' %}
                                 <a href="{{ config.base_url }}/{{ media.user_code }}/{{ media.code }}.{{ media.extension }}" target="_blank">
-                                    <img class="card-img-top user-img" src="{{ config.base_url }}/{{ media.user_code }}/{{ media.code }}.{{ media.extension }}/raw" alt="{{ media.filename }}">
+                                    <img class="card-img-top user-img" src="{{ config.base_url }}/{{ media.user_code }}/{{ media.code }}.{{ media.extension }}/raw?width=348&height=192" alt="{{ media.filename }}">
                                 </a>
                             {% else %}
                                 <a href="{{ config.base_url }}/{{ media.user_code }}/{{ media.code }}.{{ media.extension }}" target="_blank">
@@ -44,7 +44,6 @@
                             </div>
                         </div>
                     </div>
-                    {% flush %}
                 {% endfor %}
             </div>
             {% include 'dashboard/pager.twig' %}