]> _ Git - psq.git/commitdiff
downlaod pdf
authorLouis Jeckel <louis.jeckel@outlook.cm>
Wed, 9 Sep 2020 20:53:19 +0000 (22:53 +0200)
committerLouis Jeckel <louis.jeckel@outlook.cm>
Wed, 9 Sep 2020 20:53:19 +0000 (22:53 +0200)
app/Http/Controllers/FlowpaperController.php
app/PdfFile.php
routes/web.php

index 2a08031ede5e2edd0d2756e366adcdfdf0832bc5..c868d930caedc471dc2f37089fbecf09d64fe634 100644 (file)
@@ -63,4 +63,12 @@ class FlowpaperController extends Controller
         return $file->view();
     }
 
+    public function download(PdfFile $file, Request $request)
+    {
+        if (! $request->hasValidSignature()) {
+            abort(401);
+        }
+        return $file->downloadFile();
+    }
+
 }
index 02495ca304ddf86df380db2b5e51dc86b71c8c0e..15798814f6e73371a7098ffc8ef14d40b5ce35d8 100644 (file)
@@ -7,6 +7,7 @@ use A17\Twill\Models\Behaviors\HasSlug;
 use A17\Twill\Models\Behaviors\Sortable;
 use A17\Twill\Models\Model as TwillModel;
 use App\Flowpaper\Pdf2Json;
+use Aws\S3\S3Client;
 use Carbon\Carbon;
 use Illuminate\Database\Eloquent\Builder;
 use Illuminate\Database\Eloquent\Collection;
@@ -380,6 +381,25 @@ class PdfFile extends TwillModel implements Sortable
 
     }
 
+    /**
+     * @param false $download
+     * @return \Symfony\Component\HttpFoundation\StreamedResponse
+     */
+    public function downloadFile($download = false)
+    {
+        $disposition = $download ?
+            'attachment' :
+            'inline';
+        $fs = Storage::cloud()->getDriver();
+        $stream = $fs->readStream($this->binPath);
+        return \Response::stream(function() use ($stream) {
+            fpassthru($stream);
+        }, 200, [
+            'Content-Type' => 'application/pdf',
+            'Content-Length' => $fs->getSize($this->binPath),
+            'Content-Disposition' => sprintf('%s; filename="%s.pdf"', $disposition, $this->title),
+        ]);
+    }
 
 
     /**
index 2a660f8b52f6abd041d9c1155f9f4957e5e9d6bc..36fc934ac37da2e723da533af7f5816456647c77 100644 (file)
@@ -47,13 +47,15 @@ Route::domain(env('CLIENT_DOMAIN_NAME'))->group(function() {
         ->get('/view/{file:slug}', 'FlowpaperController@view')
         ->name('flowpaper.view');
 
-    //For discover users
-    Route::get('/discover/{file:slug}', 'FlowpaperController@discover')->name('flowpaper.discover');
-    //For admin preview
-    Route::get('/preview/{file:slug}', 'FlowpaperController@preview')->name('flowpaper.preview');
+    Route::get('edition/{file:slug}', 'FileController@show');
 
+    /** For discover users */
+    Route::get('discover/{file:slug}', 'FlowpaperController@discover')->name('flowpaper.discover');
+    /** For admin preview */
+    Route::get('preview/{file:slug}', 'FlowpaperController@preview')->name('flowpaper.preview');
+    /** Download file */
+    Route::get('download/{file:slug}', 'FlowpaperController@download')->name('pdf.download');
 
-    Route::get('edition/{file:slug}', 'FileController@show');
 
 
     Route::get('search', 'FileController@search')->name('archives');