2012-01-25 14 views
2

xmlレポートファイルを含むzipファイルを他のファイルにアップロードする必要があるアプリケーションがあります。ディスクに保存する前にZipFileの内容を確認する方法

私がしたいのは、それがzipであることを確認するために開いて、xmlファイルがあるかどうかを確認し、そのxmlに必要ないくつかのノードを確認することです。

私はこのzipファイルをディスク/ファイルシステムに保存してから、一時ファイルを作成する前にこれを実行します。検証をパスした場合にのみファイルを保存します。

アップロードの管理には、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(); 

しかし、ZIP形式のため、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メソッドを使用していた "マジックバイト"をチェックするこの方法を知らなかった。 –

関連する問題