fix: 手机下载文件名出现html的情况

This commit is contained in:
kuaifan 2023-11-01 00:13:24 +08:00
parent c587a50505
commit acddde8faa
4 changed files with 44 additions and 30 deletions

View File

@ -1161,9 +1161,7 @@ class DialogController extends AbstractController
} }
// //
$filePath = public_path($array['path']); $filePath = public_path($array['path']);
return Base::streamDownload(function() use ($filePath) { return Base::streamDownload($filePath, $array['name']);
echo file_get_contents($filePath);
}, $array['name']);
} }
/** /**

View File

@ -1659,9 +1659,7 @@ class ProjectController extends AbstractController
} }
// //
$filePath = public_path($file->getRawOriginal('path')); $filePath = public_path($file->getRawOriginal('path'));
return Base::streamDownload(function() use ($filePath) { return Base::streamDownload($filePath, $file->name);
echo file_get_contents($filePath);
}, $file->name);
} }
/** /**

View File

@ -112,9 +112,7 @@ class FileContent extends AbstractModel
} else { } else {
$filePath = public_path($content['url']); $filePath = public_path($content['url']);
} }
return Base::streamDownload(function() use ($filePath) { return Base::streamDownload($filePath, $name);
echo file_get_contents($filePath);
}, $name);
} }
if (empty($content)) { if (empty($content)) {
$content = match ($file->type) { $content = match ($file->type) {
@ -143,9 +141,7 @@ class FileContent extends AbstractModel
if ($download) { if ($download) {
$filePath = public_path($path); $filePath = public_path($path);
if (isset($filePath)) { if (isset($filePath)) {
return Base::streamDownload(function() use ($filePath) { return Base::streamDownload($filePath, $name);
echo file_get_contents($filePath);
}, $name);
} else { } else {
abort(403, "This file not support download."); abort(403, "This file not support download.");
} }

View File

@ -11,6 +11,8 @@ use Redirect;
use Request; use Request;
use Response; use Response;
use Storage; use Storage;
use Symfony\Component\HttpFoundation\File\Exception\FileException;
use Symfony\Component\HttpFoundation\File\File;
use Validator; use Validator;
class Base class Base
@ -2870,15 +2872,35 @@ class Base
/** /**
* 流下载,解决没有后缀无法下载的问题 * 流下载,解决没有后缀无法下载的问题
* @param $callback * @param $file
* @param $name * @param $name
* @return mixed * @return mixed
*/ */
public static function streamDownload($callback, $name = null) { public static function streamDownload($file, $name = null)
{
$contentType = 'application/octet-stream';
if ($file instanceof \Closure) {
$callback = $file;
} else {
if (!$file instanceof File) {
if ($file instanceof \SplFileInfo) {
$file = new File($file->getPathname());
} else {
$file = new File((string)$file);
}
}
if (!$file->isReadable()) {
throw new FileException('File must be readable.');
}
$contentType = $file->getMimeType() ?: $contentType;
$callback = $file->getContent();
}
if ($name && !str_contains($name, '.')) { if ($name && !str_contains($name, '.')) {
$name .= "."; $name .= ".";
} }
return Response::streamDownload($callback, $name); return Response::streamDownload($callback, $name, [
'Content-Type' => $contentType,
]);
} }
/** /**