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 @@