2012-01-25 4 views
2

다른 파일 중에서 xml 보고서 파일이 들어있는 zip 파일을 업로드해야하는 응용 프로그램이 있습니다.디스크에 저장하기 전에 ZipFile의 내용을 확인하는 방법

내가하고 싶은 것은 그것이 zip인지 확인하고, xml 파일이 있는지 확인하고, 그 XML에 필요한 몇 개의 노드를 확인하는 것입니다.

이 zipfile을 디스크/파일 시스템에 저장하고 임시 파일을 만들지 않으려면이 작업을 수행하고 싶습니다. 유효성 검사를 통과 한 경우에만 파일을 저장합니다.

나는 multipart CommonsMultipartFile을 사용하여 업로드를 관리하고 있습니다.

응용 프로그램은 Java, jsp, tomcat을 사용합니다.

감사합니다.

+0

http://www.java2s.com/Code/Java/File-Input-Output/Readfileswithinazipfile.htm을 확인하면 유용 할 수있는 Java를 사용하는 여러 ZIP 작업이 표시됩니다. – MrKiane

+0

매우 안전하지 않은 것 같습니다. 서버에서 파일의 전체 내용을 수신하여 메모리에 보관하면 메모리가 부족한 상태에서 서버를 실행할 위험이 있습니다. 알 수없는 크기의 스트림을 임시 파일에 쓰는 것은 강력하게 서버를 구현할 때 가장 좋은 옵션입니다. – jtahlborn

+0

@jtahlborn 나는 파일 최대 크기를 설정하고 업로드가 허용 된 파일 크기를 초과하지 않도록 확인하실 수 있습니다. 작은 파일 만 받아 들여지면 디스크에 먼저 저장할 필요가 없습니다. – MrKiane

답변

0

파일이 ZIP 파일인지 확인하려면 URLConnection 클래스의 getContentType() 메소드를 사용할 수 있습니까? 이런 식으로 뭔가 :

URL u = new URL(fileUrl); 
URLConnection uc = u.openConnection(); 
String type = uc.getContentType(); 

하지만이 우편 형식, 50 4B이다는 magic bytes을 감지하는 것이 훨씬 빠를 것입니다.

+0

이것은 그가 요구하는 것이 아닙니다. 그는 영구적으로 저장하기 전에 업로드 된 ZIP을 가져 와서 올바른 XML (일종의 매니페스트)을 확인하려고합니다. – MrKiane

+0

은 클라이언트가 보낸 바이트 만 가져 왔음을 확인합니다. 보내진 파일이 실제로 zip 파일인지 확인하지 않습니다. – jtahlborn

+1

아, 그럼 사과드립니다 - 오해. :) – DejanLekic

0

메모리에있는 전체 파일을 버퍼링하는 방법에 대한 OP에 대한 내 의견을 참조하십시오.

하나의 빠른 첫 번째 올바른 zip 파일을 확인하려면 해당 "마법"바이트의 처음 4 바이트를 확인하십시오. zip 파일은 처음 4 바이트 {(byte)0x50, (byte)0x4b, (byte)0x03, (byte)0x04}으로 시작해야합니다. 의 유일한 방법은입니다. 그러나 확인하려면 압축을 해제하십시오.

+0

팁 주셔서 감사합니다. 나는 contentType 메소드를 사용하고있는 "마법 바이트"를 검사하는 방법을 알지 못했습니다. –

관련 문제