Filetyp aus ByteArrayInputStream erkennen (XML oder ZIP)

-ben-

Mitglied
Hallo

Ich habe folgendes Problem: Ein User lädt über die Website ein File im Format XML oder ZIP hoch. Nun sollte ich Serverseitig den Typ erkennen und die entsprechende Business-Methode aufrufen.

Als Input habe ich eine Instanz eines ByteArrayInputStream.

Code:
ZipInputStream zipStream = new ZipInputStream(in);
ZipEntry entry = null;
while((entry = zipStream.getNextEntry()) != null) {
	System.out.println(entry.getName());
}

Falls es sich um kein gültiges Zip-Archiv handelt wirft getNextEntry() keine Exception sondern gibt null zurück.

Hat jemand eine Idee wie ich dies lösen könnte?

Gruss
 
Ich habs jetzt gelöst indem ich die MagicNumber (die ersten vier bytes) des InputStreams auslese und prüfe ob diese mit dem für Zip-Files gültigen Headers (0x04034b50) übereinstimme. Jedoch finde ich diese Lösung relativ umständlich und denke es gäbe sicher eine pragmatischere Lösung.

Im apache-commons Projekt habe ich diesbezüglich nur Support in dem sandbox-Subprojekt «Compress» gefunden, welches ich für den produktiven Einsatz lieber nicht verwenden möchte..
 
Hallo,

du könntest auch mal
Java:
/**
 * 
 */
package de.tutorials;

import java.net.URL;
import java.net.URLConnection;

/**
 * @author Thomas.Darimont
 * 
 */
public class StreamTypeDetectionExample {

	/**
	 * @param args
	 */
	public static void main(String[] args) throws Exception {

		System.out.println(URLConnection.guessContentTypeFromStream(new URL(
				"http://www.tutorials.de/banners.jpg").openStream()));

		System.out.println(URLConnection.guessContentTypeFromStream(new URL(
				"http://www.tutorials.de/widgets/os.xml").openStream()));

	}

}
versuchen.

Wobei das zip Format hier scheinbar nicht erkannt wird.

Gruß Tom
 
Zurück