Dateispeicher
Das Dateispeichersystem von Doggy basiert auf League Flysystem und unterstützt lokalen Speicher sowie S3-kompatiblen Speicher. Es bietet Datei-Upload, Bildoptimierung und URL-Generierung.
Übersicht
Das Speichersystem befindet sich unter src/Service/Storage/:
src/Service/Storage/
├── StorageManager.php # 存储管理器(适配器选择)
├── FileUploadService.php # 文件上传服务
├── FileUrlGenerator.php # URL 生成/缓存
├── ImageOptimizerService.php # 图片优化(Imagine 库)
└── Adapter/
├── StorageAdapterInterface.php
├── LocalStorageAdapter.php
└── S3StorageAdapter.phpDie zugehörigen Entitäten befinden sich unter src/Entity/Storage/:
| Entität | Beschreibung |
|---|---|
File.php | Dateidatensatz |
StorageConfig.php | Speicherkonfiguration (Adaptertyp, Parameter, CDN-Domain) |
UploadSession.php | Upload-Sitzung |
Storage-Backends
| Backend | Adapter | Einsatzszenario |
|---|---|---|
| Local | LocalStorageAdapter | Entwicklungsumgebung, kleine Bereitstellungen |
| AWS S3 | S3StorageAdapter | Cloud-Bereitstellung (unterstützt CDN-Domain) |
Lokaler Speicher
php
// 默认本地存储:public/uploads/
$adapter = new LocalStorageAdapter(
rootPath: '/var/www/public/uploads',
publicUrl: '/uploads'
);S3-Speicher
php
// S3 兼容存储(支持 AWS、MinIO、阿里云 OSS 等)
$adapter = new S3StorageAdapter([
'access_key' => '...',
'secret_key' => '...',
'region' => 'us-east-1',
'bucket' => 'doggy-files',
'endpoint' => 'https://oss-cn-hangzhou.aliyuncs.com',
'cdn_domain' => 'https://cdn.example.com',
]);Datei-Upload
FileUploadService bietet einen vollständigen Upload-Ablauf:
php
$file = $fileUploadService->upload($uploadedFile, [
'disk' => 'default',
'optimize' => true,
'max_size' => 52428800, // 50MB
]);Upload-Ablauf:
FileUploadingEventauslösen (kann die Optionen abfangen und ändern)- Dateisicherheitsprüfung (Typ, Größe, Dateiendung, MIME)
- SHA-256-Hash-Deduplizierung
- Speicherpfad nach Datumsstrategie generieren (
Y/m/uuid.extoderuuid.ext) - Zum Adapter hochladen
File-Entität erstellenFileUploadedEventauslösen- Asynchrone Bildkomprimierungsnachricht (
ImageCompressMessage)
Bildoptimierung
ImageOptimizerService basiert auf der Imagine-Bibliothek:
php
$optimizer->optimize($sourcePath, $targetPath, [
'max_width' => 1920,
'max_height' => 1080,
'quality' => 80,
'format' => 'webp',
]);URL-Generierung
FileUrlGenerator unterstützt Caching und temporäre URLs:
php
$url = $urlGenerator->getUrl($file); // 带缓存
$tempUrl = $urlGenerator->getTemporaryUrl($file, $expiresAt); // 签名 URL
$urlGenerator->invalidateUrl($file); // 清除缓存Verwaltungsoberfläche
Einstieg: App\Controller\Admin\StorageConfigController
Template: templates/admin/storage/