Frühling - so streamen Sie große multipart-Datei-uploads, um die Datenbank ohne speichern auf dem lokalen Dateisystem
Spring boot ist standardmäßig MultiPartResolver Schnittstelle verarbeitet das heraufladen von multipart-Dateien durch speichern auf dem lokalen Dateisystem. Bevor der controller-Methode eingegeben wird, wird die gesamte multipart-Datei muss fertig hochladen auf den server.
Speichern wir alle unsere hochgeladenen Dateien direkt in eine Datenbank und auf unseren Servern haben sehr kleine Festplatten-quota, so dass, wenn eine große Datei hochgeladen ist, sehen wir eine IOExeption - Disk quota exceeded
.
Gibt es eine Möglichkeit, um den stream direkt aus dem client die eingehende Anforderung vor der Frühling s MultiPartResolver speichert die Datei auf dem lokalen Dateisystem, so dass wir können den stream direkt auf unserer db?
- Welche Datenbank verwenden Sie?
- Wir sind mit AWS S3
Du musst angemeldet sein, um einen Kommentar abzugeben.
Könnten Sie apache direkt, wie hier beschrieben https://commons.apache.org/proper/commons-fileupload/streaming.html.
Stellen Sie sicher, zu deaktivieren Federn multipart auflösen Mechanismus.
Anwendung.yml:
Eigentlich ist es keine triviale Aufgabe. Wenn Sie möchten, schreiben Sie stream vom client direkt an die Datenbank, die Sie haben, um die Anfrage Bearbeiten manuell. Es gibt einige Bibliotheken, die diese Aufgabe einfacher. Einer von Ihnen ist "Apache Commons FileUpload". Unten sehr einfaches Beispiel, wie kann man Sie verarbeiten die eingehenden
multipart/form-data
Anfrage von dieser Bibliothek.Header für die Datei-Feld sieht wie folgt aus:
Header für einfaches Feld sieht folgendermaßen aus:
Beachten Sie, dass dieses snippet ist nur Vereinfachtes Beispiel, um zu zeigen, Sie Richtung. Es gibt keine einige details wie: extrahieren von Feldnamen aus dem header, erstellen Sie Datenbank-output-stream etc. Sie implementieren können, alle diese Dinge durch Ihre eigenen.
Beispiele von multipart-request-Header-Feld finden Sie in RFC1867. Informationen über
multipart/form-data
RFC2388."Content-Type: multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW" -F "filename=test" -F "[email protected]"