Apache Tomcat-Einstellung „Maximale Datei-Uploadgröße“

Apache Tomcat-Einstellung „Maximale Datei-Uploadgröße“

Ich implementiere eine Grails/Groovy-Web-App und möchte die Datei-Uploadgröße des Benutzers begrenzen. Ich möchte nicht, dass jemand eine 10 GB große Datei auf meinen Server hochlädt. Ich habe herausgefunden, dass die meisten Ansätze zur Berechnung der Größe erst nach dem Hochladen der Datei durchgeführt werden. Was passiert, wenn jemand 10 Profile einrichtet und 10 Dateien mit einer Größe von bis zu 10 GB hochlädt? Das kann den Server überlasten und sehr viel Platz auf der Serverfestplatte belegen. Also versuche ich, dies zu verhindern.

Ich habe herausgefunden, dass Apache Tomcat die folgende Konfiguration zulässt, entweder im fest codierten oder im Annotation-Ansatz. Ich bin nicht sicher, ob die maximale Dateigröße während des Upload-Prozesses oder nach dem Hochladen der Datei an einen temporären Ort berechnet wird. Die Dokumentation gibt Folgendes an:

Die Annotation @MultipartConfig unterstützt die folgenden optionalen Attribute:

location: Ein absoluter Pfad zu einem Verzeichnis im Dateisystem. Das location-Attribut unterstützt keinen Pfad relativ zum Anwendungskontext. Dieser Speicherort wird verwendet, um Dateien vorübergehend zu speichern, während die Teile verarbeitet werden oder wenn die Größe der Datei die angegebene Einstellung „fileSizeThreshold“ überschreitet. Der Standardspeicherort ist „“.

fileSizeThreshold: Die Dateigröße in Bytes, nach der die Datei vorübergehend auf der Festplatte gespeichert wird. Die Standardgröße beträgt 0 Bytes.

MaxFileSize: Die maximal zulässige Größe für hochgeladene Dateien in Bytes. Wenn die Größe einer hochgeladenen Datei diese Größe überschreitet, löst der Webcontainer eine Ausnahme (IllegalStateException) aus. Die Standardgröße ist unbegrenzt.

maxRequestSize: Die maximal zulässige Größe für eine Multipart/Formulardaten-Anforderung in Bytes. Der Webcontainer löst eine Ausnahme aus, wenn die Gesamtgröße aller hochgeladenen Dateien diesen Schwellenwert überschreitet. Die Standardgröße ist unbegrenzt.

Annotationsansatz:

@MultipartConfig(location="/tmp", fileSizeThreshold=1024*1024, 
    maxFileSize=1024*1024*5, maxRequestSize=1024*1024*5*5)

und hier ist der fest codierte Wert:

<multipart-config>
<!– 50MB max –>
<max-file-size>52428800</max-file-size>
<max-request-size>52428800</max-request-size>
<file-size-threshold>0</file-size-threshold>
</multipart-config>

Ich wäre dankbar, wenn mir jemand erklären könnte, ob die maximale Dateigröße während des Upload-Vorgangs berechnet wird.

Antwort1

Die maximale Dateigröße wird berechnet, nachdem die gesamte Datei hochgeladen wurde. Sie können eine Datei (1 GB groß) in Ihre Webanwendung hochladen und dann feststellen, was wirklich passiert. Sich auf Tomcat zu verlassen, wäre also sinnlos. Dieselbe Arbeit in Servlet zu erledigen ist möglich, aber wenn Ihr Zähler die maximale Dateigröße erreicht, wie können Sie die zugrunde liegende HTTP-Verbindung trennen? Ich denke, das geht nicht. Das HTTP-Protokoll ist unidirektional, Sie können dem Browser also nicht sagen, dass er den langen Post rechtzeitig abbrechen soll. Das Einzige, was Sie tun können, ist, wenn Ihr Zähler den Schwellenwert erreicht, die nachfolgenden Bytes aus dem Eingabestream einfach zu ignorieren, um Speicherplatz zu sparen, bis die Dateiübertragung abgeschlossen ist.

verwandte Informationen