From 045d585df439dca02e084e3b4f909124f3ea967a Mon Sep 17 00:00:00 2001 From: kuaifan Date: Thu, 23 Jun 2022 14:37:54 +0800 Subject: [PATCH] =?UTF-8?q?perf:=20=E4=BC=98=E5=8C=96pdf=E6=B5=8F=E8=A7=88?= =?UTF-8?q?=E6=96=B9=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Http/Controllers/IndexController.php | 35 +++++++++++++++++++ app/Models/File.php | 19 ++++------ app/Models/FileContent.php | 19 ++++------ resources/assets/js/components/OnlyOffice.vue | 10 ++---- .../pages/manage/components/FileContent.vue | 16 ++++----- .../pages/manage/components/FilePreview.vue | 16 ++++----- .../js/pages/manage/components/IFrame.vue | 8 ++++- resources/assets/js/pages/single/fileMsg.vue | 3 +- resources/assets/js/pages/single/fileTask.vue | 3 +- 9 files changed, 73 insertions(+), 56 deletions(-) diff --git a/app/Http/Controllers/IndexController.php b/app/Http/Controllers/IndexController.php index 0a17dbde2..c68a7fb73 100755 --- a/app/Http/Controllers/IndexController.php +++ b/app/Http/Controllers/IndexController.php @@ -2,6 +2,7 @@ namespace App\Http\Controllers; +use App\Models\File; use App\Module\Base; use App\Module\Ihttp; use App\Module\RandomColor; @@ -276,6 +277,40 @@ class IndexController extends InvokeController ]; } + /** + * 预览文件 + * @return array|mixed + */ + public function online__preview() + { + $key = trim(Request::input('key')); + // + $data = parse_url($key); + $path = Arr::get($data, 'path'); + $file = public_path($path); + // + if (file_exists($file)) { + parse_str($data['query'], $query); + $name = Arr::get($query, 'name'); + $ext = strtolower(Arr::get($query, 'ext')); + if ($ext === 'pdf') { + return response()->download($file, $name, [], 'inline'); + } + // + if (in_array($ext, File::localExt)) { + $url = Base::fillUrl($path); + } else { + $url = 'http://' . env('APP_IPPR') . '.3/' . $path; + } + $url = Base::urlAddparameter($url, [ + 'fullfilename' => $name + ]); + $toUrl = Base::fillUrl("fileview/onlinePreview?url=" . urlencode(base64_encode($url))); + return Redirect::to($toUrl, 301); + } + return abort(404); + } + /** * 设置语言和皮肤 * @return \Illuminate\Contracts\Foundation\Application|\Illuminate\Contracts\View\Factory|\Illuminate\Contracts\View\View diff --git a/app/Models/File.php b/app/Models/File.php index 25ffad551..234f30b65 100644 --- a/app/Models/File.php +++ b/app/Models/File.php @@ -455,21 +455,14 @@ class File extends AbstractModel else { // 其他预览 - if (in_array($fileExt, File::localExt)) { - $url = Base::fillUrl($filePath); - } else { - $url = 'http://' . env('APP_IPPR') . '.3/' . $filePath; - } - if ($fileExt != 'pdf') { - $fileDotExt = ".{$fileExt}"; - $fullFileName = Base::rightDelete($fileName, $fileDotExt) . $fileDotExt; - $url = Base::urlAddparameter($url, [ - 'fullfilename' => $fullFileName - ]); - } + $name = Base::rightDelete($fileName, ".{$fileExt}") . ".{$fileExt}"; $data['content'] = [ 'preview' => true, - 'url' => base64_encode($url), + 'name' => $name, + 'key' => urlencode(Base::urlAddparameter($filePath, [ + 'name' => $name, + 'ext' => $fileExt + ])), ]; $data['file_mode'] = 'preview'; } diff --git a/app/Models/FileContent.php b/app/Models/FileContent.php index 8a3e20b80..85b530689 100644 --- a/app/Models/FileContent.php +++ b/app/Models/FileContent.php @@ -50,19 +50,12 @@ class FileContent extends AbstractModel $fileExt = $array['ext']; $fileName = $array['name']; $filePath = $array['path']; - if (in_array($fileExt, File::localExt)) { - $url = Base::fillUrl($filePath); - } else { - $url = 'http://' . env('APP_IPPR') . '.3/' . $filePath; - } - if ($fileExt != 'pdf') { - $fileDotExt = ".{$fileExt}"; - $fullFileName = Base::rightDelete($fileName, $fileDotExt) . $fileDotExt; - $url = Base::urlAddparameter($url, [ - 'fullfilename' => $fullFileName - ]); - } - return Base::fillUrl("fileview/onlinePreview?url=" . urlencode(base64_encode($url))); + $name = Base::rightDelete($fileName, ".{$fileExt}") . ".{$fileExt}"; + $key = urlencode(Base::urlAddparameter($filePath, [ + 'name' => $name, + 'ext' => $fileExt + ])); + return Base::fillUrl("online/preview/{$name}?key={$key}"); } /** diff --git a/resources/assets/js/components/OnlyOffice.vue b/resources/assets/js/components/OnlyOffice.vue index 30c9d5b6a..c540da61f 100644 --- a/resources/assets/js/components/OnlyOffice.vue +++ b/resources/assets/js/components/OnlyOffice.vue @@ -4,7 +4,7 @@ {{$L('组件加载失败!')}}
- +