2009-12-23 4 views
7

Wenn eine Datei sagt, dass 100 MB Größe vom Browser hochgeladen wird, hält Spring ganze Daten im Speicher oder speichert sie vorübergehend auf der Festplatte. Nachdem ich Spring Doc gelesen habe, weiß ich, wie man ein Temp-Verzeichnis setzt, aber ich möchte wissen, was passieren wird, wenn ich das nicht erwähne.Wird Spring den Inhalt im Speicher halten oder auf der Festplatte speichern?

Am mit folgenden Erklärung:

<bean id="multipartResolver" 
class="org.springframework.web.multipart.commons.CommonsMultipartResolver"/> 

Bean:

public class FileHolder { 

    private MultipartFile file; 

    public void setFile(MultipartFile file) { 
     this.file = file; 
    } 

    public MultipartFile getFile() { 
     return file; 
    } 
} 

Wird das "Datei" Objekt in dem obigen Bean hält, dass 100 MB Daten?

Antwort

10

Ein bisschen mehr Graben in der javadoc zeigt, dass die standardmäßige maximale speicherinterne Größe 10240 Bytes ist. Davon ausgehend würde ich annehmen, dass jeder Upload von weniger als 10kB im Speicher gehalten wird, alles Größere wird auf der Festplatte gespeichert. Wenn Sie den Speicherort des Laufwerks nicht angeben, wird wahrscheinlich ein Standard verwendet (ich nehme an, dass das System das tmp-Standardverzeichnis verwendet).

2

Wenn Sie das temporäre Verzeichnis nicht festlegen CommonsMultipartResolver speichert temporäre Dateien im temporären Verzeichnis des Servlet-Containers.

Das "Datei" -Objekt in Ihrem Beispiel speichert die Daten nicht wie eine java.io.File-Referenz. Sie müssen die Daten mit file.getBytes() erhalten.

2

Ja, aber wenn es auf der Festplatte gespeichert ist, wird es gelöscht, nachdem die Anfrage verarbeitet wurde. Sie können den Schwellenwert eingestellt für, wenn es auf der Festplatte gespeichert werden:

In Ihrer multipartresolver Bohne Definition, zum Beispiel:

<property name="maxUploadSize" value="1000000" /> 
<property name="maxInMemorySize" value="1000" /> 

Wenn es im Speicher gehalten ist, könnten Sie speichern sie in der Sitzung und verarbeiten es in die nächste Anfrage zum Beispiel, wenn Sie auf eine Benutzerbestätigung warten.