Dateigröße einer Datei im Internet ermitteln

HankHorny

Grünschnabel
Hallo zusammen,

ich bastle derzeit an einem Programm, das mir einen iTunes-RSS Feed zusammenbaut.
Dabei bin ich auf folgendes Problem gestoßen: Ich muss die Dateigröße der verlinkten Dateien in den Feed schreiben. Nun liegen diese Dateien aber auf einem Webserver. Es sind zu viele und sie sind zu groß, um sie alle herunterzuladen.
Ich suche also nach einer Möglichkeit, die Dateigröße zu ermitteln, ohne die Dateien komplett zu übertragen. Geht das?

Freue mich über eure Hilfe :-)

Gruß,
Mirco
 
Hi Mirco,

Du könntest das mit einem HTTP HEAD Request machen.

Java:
import java.io.*;
import java.net.*;
import java.util.*;


public class HttpHeadRequest {

	public HashMap<String, String> getHeader(URL url) throws UnknownHostException, IOException {
		HashMap<String, String> hash = new HashMap<String, String>();
		int port = url.getPort() != -1 ? url.getPort() : url.getDefaultPort();
		
		Socket sock = new Socket(url.getHost(), port);
		PrintWriter out = new PrintWriter(sock.getOutputStream(), true);
		BufferedReader in = new BufferedReader(new InputStreamReader(
                                    sock.getInputStream()));
		
		String request = "HEAD " + url.getPath() + " HTTP/1.0\r\n\r\n";
		
		out.println(request);
		String line;
		while((line = in.readLine()) != null) {
			String[] s = line.split(":");
			if(s.length < 2) { continue; }
			hash.put(s[0], s[1].trim());
		}
		
		out.close();
		in.close();
		sock.close();

		return hash;
	}

	public static void main(String[] args) {
		HttpHeadRequest request = new HttpHeadRequest();
		try {
			HashMap<String, String> header = request.getHeader(new URL("http://localhost:8080/test/index.html"));
			System.out.println(header.get("Content-Length") + " bytes");
		} catch (Exception e) {
			e.printStackTrace();
		} 
	}

}

Gruß
joschi
 
Hallo,

geht auch einfacher:
Java:
		System.out
				.println(new URL(
						"http://www.tutorials.de/forum/images_v6/misc/tuts_default.gif")
						.openConnection().getContentLength());

Gruß Tom
 
Aber was einem der Server da liefert kann auch irgend ein Schwachsinn sein, oder?
Man bittet ja nur den Server es einem zu sagen und greift nich auf das Dateisystem.

Oder liege ich da falsch?
(denke dabei gerade an PHP wenn man im Header die Länge des Content mitgeben muss damit der Downloadende weiß was ihn erwartet - da kann man ja auch hinschreiben was man mag.)
 
Zurück