2009-12-23 5 views
7

브라우저에서 100MB 크기의 파일을 업로드하면 스프링이 전체 데이터를 메모리에 보관하거나 디스크에 임시 저장합니다. Spring doc을 거친 후에 임시 디렉터리를 설정하는 방법을 알고 있지만 그 점을 언급하지 않으면 어떤 일이 발생하는지 알고 싶습니다.Spring은 메모리에 내용을 저장하거나 디스크에 저장합니까?

오전 가진 다음 선언 :

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

콩 :

public class FileHolder { 

    private MultipartFile file; 

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

    public MultipartFile getFile() { 
     return file; 
    } 
} 

위의 빈에서 "파일"개체는 100메가바이트 데이터를 보유 할 것인가?

답변

10

javadoc에서 조금 더 자세히 살펴보면 기본 최대 메모리 크기가 10240 바이트임을 알 수 있습니다. 10kB 미만의 업로드는 메모리에 저장되어 있다고 가정하면 더 큰 용량의 파일은 디스크에 저장됩니다. 디스크 위치를 지정하지 않으면 기본값을 사용할 것입니다 (시스템 기본 tmp 디렉토리를 사용하는 것 같습니다).

2

임시 디렉토리를 설정하지 않은 경우 CommonsMultipartResolver은 서블릿 컨테이너의 임시 디렉토리에 임시 파일을 저장합니다.

예제의 "file"개체는 java.io.File 참조와 비슷한 데이터를 보유하지 않습니다. file.getBytes()으로 데이터를 가져와야합니다.

2

예, 디스크에 저장되어있는 경우 요청이 처리 된 후 삭제됩니다.

당신의 multipartresolver bean 정의에서

, 예를 들면 :이 메모리에서 열리는 경우

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

, 당신이이 세션에 저장할 수 있고 그것을 처리가 디스크에 저장 될 때를 위해 당신은 임계 값을 설정할 수 있습니다 예를 들어 사용자 확인을 기다리는 경우와 같은 다음 요청

관련 문제