2012-07-11 2 views

답변

5

저장되는 데이터는 어디에 있습니까?

저장하지 않았습니까? 스트리밍 API는 DiskFileItemFactory를 사용하지 않습니다. 그러나 BalusC가 게시 한 데이터를 복사하기위한 버퍼를 사용합니다. 당신이 업로드의 흐름을 일단 메신저 잘못이 있지만, 스트리밍 API는 어떤 DiskFileItemFactory 객체를 사용하지 않는 경우 , 당신은 저를 해결 API

3

다음은 DiskFileItemFactory의 javadoc입니다.

기본 FileItemFactory 구현입니다. 이 구현 은 내용을 메모리에 유지하거나 작은 항목의 경우 또는 큰 항목의 경우 디스크의 임시 파일에 내용을 보관하는 FileItem 인스턴스를 만듭니다. 콘텐츠가 디스크에 저장되는 크기 임계 값은 이고 임시 파일은 으로 생성되는 디렉터리와 마찬가지로 구성 할 수 있습니다. 파일 항목을 생성

Size threshold is 10KB. 
Repository is the system default temp directory, as returned by System.getProperty("java.io.tmpdir"). 

임시 파일,에 나중에 을 삭제해야합니다 그렇지 않으면 구성되지 않은 경우 다음과 같이

는 기본 구성 값입니다. 이를 수행하는 가장 좋은 방법은 DiskFileItemFactory에서 설정할 수있는 FileCleaningTracker 인 을 사용하는 것입니다. 그러나 같은 추적기를 사용하는 경우 다음 사항을 고려해야합니다. 임시 파일 은 더 이상 필요하지 않으면 자동으로 삭제됩니다. (More 정확히 File의 해당 인스턴스가 가비지 일 때 이 수집됩니다. 이는 FileCleaner 클래스가로드 될 때 이 자동으로 시작되는 소위 사신 스레드에 의해 수행됩니다. 예를 들어 웹 응용 프로그램이 종료되면 해당 스레드를 종료하는 것이 좋습니다. commons-fileupload에 대한 사용자 안내서의 "자원 정리"절을 참조하십시오. FileItem 디스크에 실제 파일을 표시 할 수있다 그래서

, 예 closecleanup이 필요하다.

+0

에서

long bytesCopied = Streams.copy(yourInputStream, yourOutputStream, true); 

봐 사용할 수 있습니다. 또는 그것의 사용은 함축되어 있는가? – user571099

+0

@ user571099 질문에서 링크를 따라 가서 그 페이지 상단의'User Guide'를 클릭하면 DiskFileItemFactory가 어떻게 사용되는지 볼 수 있습니다. –

+0

@Alexander Pogrebnyak, 내 생각 엔 user571099가 옳다고 생각합니다. 사용자 가이드는 파일 업로드의 전통적인 방법 (일반 파일 업로드 방식이 아닌 스트리밍 방식)을 말하며, 임계 값을 초과하는 파일의 임시 폴더가 필요합니다. 파일은 삭제가 필요합니다. 사기꾼 스레드는이 용도로 사용됩니다.스트리밍 API에서는 Stream API의 DiskFileItem을 사용하지 않지만 DiskFileItemFactory를 사용하지 않는 예제 사용법을 볼 수 있습니다. 원래 질문에 답하기 위해, 데이터는 byte [] 형태로 메모리에 저장되고, 네, InputStream을 닫아야합니다. 수락 된 대답이 정확합니다. –

2

Java 메모리에 byte[]으로 저장됩니다.

관련 문제