Foto-Upload: 413 beheben und Kamera stabilisieren
- nginx client_max_body_size auf 12m (Standard 1 MB loeste beim Bild-Upload einen 413 aus, bevor das Backend den Upload sah). - Backend-Bildlimit auf 8 MB angehoben, bleibt unter dem nginx-Limit, damit Uebergroesse eine klare 400-Meldung statt eines nackten 413 ergibt. - Web: Foto vor dem Upload clientseitig verkleinern (max 1600px, JPEG) - schneller, kleiner in der DB, zuverlaessig unter dem Limit. - iOS: Kamera ueber fullScreenCover statt sheet und Schliessen deterministisch ueber ein Binding - behebt das "Kamera geht direkt wieder zu"-Flackern. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -39,8 +39,8 @@ struct ProductPhotoSection: View {
|
||||
if busy { ProgressView() }
|
||||
if let error { Text(error).foregroundStyle(.red).font(.callout) }
|
||||
}
|
||||
.sheet(isPresented: $showCamera) {
|
||||
CameraPicker { image in Task { await upload(image) } }
|
||||
.fullScreenCover(isPresented: $showCamera) {
|
||||
CameraPicker(isPresented: $showCamera) { image in Task { await upload(image) } }
|
||||
.ignoresSafeArea()
|
||||
}
|
||||
.onChange(of: pickerItem) { item in
|
||||
@@ -108,8 +108,8 @@ struct ProductPhotoSection: View {
|
||||
/// Kamera über UIImagePickerController – SwiftUI hat keine eigene Kamera-Ansicht.
|
||||
/// Ohne Kamera (Simulator) fällt es auf die Fotoauswahl zurück.
|
||||
struct CameraPicker: UIViewControllerRepresentable {
|
||||
@Binding var isPresented: Bool
|
||||
var onImage: (UIImage) -> Void
|
||||
@Environment(\.dismiss) private var dismiss
|
||||
|
||||
func makeUIViewController(context: Context) -> UIImagePickerController {
|
||||
let picker = UIImagePickerController()
|
||||
@@ -123,6 +123,9 @@ struct CameraPicker: UIViewControllerRepresentable {
|
||||
|
||||
func makeCoordinator() -> Coordinator { Coordinator(self) }
|
||||
|
||||
// Schließen deterministisch über das Binding statt über die Umgebung –
|
||||
// das behebt das Flackern (Kamera geht direkt wieder zu), wenn die Ansicht
|
||||
// während der Präsentation neu ausgewertet wird.
|
||||
final class Coordinator: NSObject, UINavigationControllerDelegate, UIImagePickerControllerDelegate {
|
||||
let parent: CameraPicker
|
||||
init(_ parent: CameraPicker) { self.parent = parent }
|
||||
@@ -130,10 +133,10 @@ struct CameraPicker: UIViewControllerRepresentable {
|
||||
func imagePickerController(_ picker: UIImagePickerController,
|
||||
didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey: Any]) {
|
||||
if let image = info[.originalImage] as? UIImage { parent.onImage(image) }
|
||||
parent.dismiss()
|
||||
parent.isPresented = false
|
||||
}
|
||||
func imagePickerControllerDidCancel(_ picker: UIImagePickerController) {
|
||||
parent.dismiss()
|
||||
parent.isPresented = false
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user