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('组件加载失败!')}}
- +