Datei-Upload: Mehrfach-Upload mit Drag & Drop und Dateiliste
- Upload-Formular unterstützt jetzt mehrere Dateien gleichzeitig - Drag & Drop oder Klick zum Auswählen (mehrfach möglich) - Dateiliste mit Dateiname, Größe, individueller Kategorie-Auswahl und Entfernen-Button pro Datei - Standard-Kategorie kann oben gewählt werden, individuelle Kategorie pro Datei ist optional überschreibbar - Controller verarbeitet Array von Dateien (je max. 10 MB) - Übersetzungen in allen 6 Sprachen ergänzt Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -52,31 +52,52 @@ class FileController extends Controller
|
||||
}
|
||||
|
||||
$request->validate([
|
||||
'file' => ['required', 'file', 'max:10240', 'mimes:pdf,docx,xlsx,jpg,jpeg,png,gif,webp'],
|
||||
'file_category_id' => ['required', 'exists:file_categories,id'],
|
||||
'files' => ['required', 'array', 'min:1'],
|
||||
'files.*' => ['file', 'max:10240', 'mimes:pdf,docx,xlsx,jpg,jpeg,png,gif,webp'],
|
||||
'categories' => ['required', 'array', 'min:1'],
|
||||
'categories.*' => ['required', 'exists:file_categories,id'],
|
||||
]);
|
||||
|
||||
$uploadedFile = $request->file('file');
|
||||
$extension = $uploadedFile->guessExtension();
|
||||
$storedName = Str::uuid() . '.' . $extension;
|
||||
$uploadedFiles = $request->file('files', []);
|
||||
$categories = $request->input('categories', []);
|
||||
$count = 0;
|
||||
|
||||
Storage::disk('local')->putFileAs('files', $uploadedFile, $storedName);
|
||||
foreach ($uploadedFiles as $index => $uploadedFile) {
|
||||
if (!$uploadedFile || !$uploadedFile->isValid()) {
|
||||
continue;
|
||||
}
|
||||
|
||||
$file = new File([
|
||||
'file_category_id' => $request->file_category_id,
|
||||
'original_name' => $uploadedFile->getClientOriginalName(),
|
||||
'mime_type' => $uploadedFile->getClientMimeType(),
|
||||
'size' => $uploadedFile->getSize(),
|
||||
]);
|
||||
$file->stored_name = $storedName;
|
||||
$file->disk = 'private';
|
||||
$file->uploaded_by = auth()->id();
|
||||
$file->save();
|
||||
$categoryId = $categories[$index] ?? null;
|
||||
if (!$categoryId) {
|
||||
continue;
|
||||
}
|
||||
|
||||
ActivityLog::logWithChanges('uploaded', __('admin.log_file_uploaded', ['name' => $file->original_name]), 'File', $file->id, null, ['name' => $file->original_name, 'category' => $file->category->name ?? '']);
|
||||
$extension = $uploadedFile->guessExtension();
|
||||
$storedName = Str::uuid() . '.' . $extension;
|
||||
|
||||
Storage::disk('local')->putFileAs('files', $uploadedFile, $storedName);
|
||||
|
||||
$file = new File([
|
||||
'file_category_id' => $categoryId,
|
||||
'original_name' => $uploadedFile->getClientOriginalName(),
|
||||
'mime_type' => $uploadedFile->getClientMimeType(),
|
||||
'size' => $uploadedFile->getSize(),
|
||||
]);
|
||||
$file->stored_name = $storedName;
|
||||
$file->disk = 'private';
|
||||
$file->uploaded_by = auth()->id();
|
||||
$file->save();
|
||||
|
||||
ActivityLog::logWithChanges('uploaded', __('admin.log_file_uploaded', ['name' => $file->original_name]), 'File', $file->id, null, ['name' => $file->original_name, 'category' => $file->category->name ?? '']);
|
||||
$count++;
|
||||
}
|
||||
|
||||
$message = $count === 1
|
||||
? __('admin.file_uploaded')
|
||||
: __('admin.files_uploaded', ['count' => $count]);
|
||||
|
||||
return redirect()->route('admin.files.index')
|
||||
->with('success', __('admin.file_uploaded'));
|
||||
->with('success', $message);
|
||||
}
|
||||
|
||||
public function destroy(File $file): RedirectResponse
|
||||
|
||||
Reference in New Issue
Block a user