2009-12-23 12 views
7

Quando un file dicono 100 MB di dimensione viene caricato dal browser, che consente molla di ritegno intero i dati nella memoria o negozi nel disco temporaneo. Dopo aver attraversato Spring doc, so come impostare una directory temporanea, ma voglio sapere cosa accadrà se non lo menzionerò.Spring conserva i contenuti in memoria o archivia nel disco?

sto avendo seguente dichiarazione:

<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; 
    } 
} 

Sarà l'oggetto "file" nel chicco sopra contenere che 100 MB di dati?

risposta

10

Un po 'più di scavo nel javadoc mostra che il massimo predefinito in memoria dimensione è 10240 byte. Da quello supponevo che qualsiasi upload inferiore a 10kB sia tenuto in memoria, qualsiasi cosa più grande sarà memorizzata su disco. Se non si specifica la posizione del disco, che sarà probabilmente usare un predefinito (direi che userà la directory tmp di default del sistema).

2

Se non si imposta la directory temporanea CommonsMultipartResolver si salvano i file temporanei nella directory temporanea del contenitore servlet.

L'oggetto "file" nel tuo esempio non detiene i dati che simile a un riferimento java.io.File. È necessario ottenere i dati con file.getBytes().

2

Sì, ma se è memorizzato su disco verrà eliminato dopo che la richiesta è stata elaborata. È possibile impostare la soglia per quando sarà memorizzato su disco:

nella definizione di fagioli multipartresolver, ad esempio:

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

Se è tenuto in memoria, è possibile memorizzare nella sessione e elaborarlo in la prossima richiesta, ad esempio, come se si stesse aspettando una conferma da parte dell'utente.

Problemi correlati