fix(import): preserve original attachment filepath structure; enable admin SPA mode
Build and Deploy / verify (push) Successful in 31s
Build and Deploy / deploy (push) Successful in 28s

This commit is contained in:
2026-10-11 19:31:11 +00:00
parent faf70ec5f4
commit 13f017e806
2 changed files with 32 additions and 20 deletions
+31 -20
View File
@@ -53,31 +53,42 @@ class AttachmentImporter
if ($source && $syncNow) {
try {
$media = $post->addMedia($source)
->preservingOriginal()
->withCustomProperties($properties)
->usingFileName(basename($row['filename']) ?: basename($source))
->toMediaCollection('attachments', MediaDisk::name());
$disk = MediaDisk::name();
$filename = basename($row['filename']) ?: basename($source);
$legacyPath = ltrim($row['filepath'] ?? '', '/');
$media->setCustomProperty('pending_sync', false);
// 保留原始目录结构:date_200802/xxx.jpg
if ($legacyPath) {
$legacyDir = dirname($legacyPath);
$storagePath = ($legacyDir !== '.' ? $legacyDir . '/' : '') . $filename;
} else {
$storagePath = $filename;
}
// 直接写文件到目标存储,不走 spatie 的自动路径生成
$content = file_get_contents($source);
\Illuminate\Support\Facades\Storage::disk($disk)->put($storagePath, $content, ['visibility' => 'public']);
// 手动创建 media 记录
$media = new Media;
$media->model_type = Post::class;
$media->model_id = $post->id;
$media->uuid = (string) Str::uuid();
$media->collection_name = 'attachments';
$media->name = pathinfo($filename, PATHINFO_FILENAME) ?: 'attachment';
$media->file_name = $filename;
$media->mime_type = $row['filetype'] ?: null;
$media->size = (int) ($row['filesize'] ?? 0);
$media->disk = $disk;
$media->conversions_disk = $disk;
$media->manipulations = [];
$media->custom_properties = $properties;
$media->generated_conversions = [];
$media->responsive_images = [];
$media->save();
return $media;
} catch (\Throwable $e) {
// addMedia 可能已插入记录并保存文件,仅缩略图生成失败:找回该记录标记完成
$existing = Media::query()
->where('collection_name', 'attachments')
->where('custom_properties->legacy_attachmentid', (int) ($row['attachmentid'] ?? 0))
->latest('id')
->first();
if ($existing) {
$existing->setCustomProperty('pending_sync', false);
$existing->save();
return $existing;
}
// 文件损坏无法入库时降级为 pending,不中断整批导入
\Illuminate\Support\Facades\Log::warning('附件导入失败,已降级为待同步', [
'attachment' => $row['attachmentid'] ?? null,