fix: 修复文档转换与预览链路中的图片、文件名和错误处理问题
This commit is contained in:
@@ -7,6 +7,7 @@ use Illuminate\Database\Eloquent\Model;
|
||||
use Illuminate\Database\Eloquent\Relations\BelongsTo;
|
||||
use Illuminate\Database\Eloquent\Relations\HasMany;
|
||||
use Illuminate\Support\Facades\Storage;
|
||||
use Illuminate\Support\Str;
|
||||
use Laravel\Scout\Searchable;
|
||||
|
||||
class Document extends Model
|
||||
@@ -114,4 +115,33 @@ class Document extends Model
|
||||
{
|
||||
return !empty($this->markdown_path) && $this->conversion_status === 'completed';
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取用于展示和下载的文件名
|
||||
* 对历史上误保存为随机存储名的记录回退到“标题.扩展名”
|
||||
*/
|
||||
public function getDisplayFileNameAttribute(): string
|
||||
{
|
||||
$fileName = trim((string) $this->file_name);
|
||||
|
||||
if ($fileName !== '' && ! $this->looksLikeGeneratedStorageName($fileName)) {
|
||||
return $fileName;
|
||||
}
|
||||
|
||||
$extension = pathinfo($fileName ?: $this->file_path, PATHINFO_EXTENSION);
|
||||
$title = trim((string) $this->title);
|
||||
$title = preg_replace('/[<>:"\/\\\\|?*\x00-\x1F]+/u', '-', $title) ?? '';
|
||||
$title = trim($title, " .-\t\n\r\0\x0B");
|
||||
$title = $title !== '' ? $title : 'document';
|
||||
|
||||
return $extension !== '' ? "{$title}.{$extension}" : $title;
|
||||
}
|
||||
|
||||
protected function looksLikeGeneratedStorageName(string $fileName): bool
|
||||
{
|
||||
$baseName = pathinfo($fileName, PATHINFO_FILENAME);
|
||||
|
||||
return Str::isUuid($baseName)
|
||||
|| (bool) preg_match('/^[0-9A-HJKMNP-TV-Z]{26}$/i', $baseName);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user