capitano666 capitano666 - 11 months ago 83
HTTP Question

HttpURLConnection downloaded file name

Is it possible to get the name of a file downloaded with HttpURLConnection?

URL url = new URL("http://somesite/getFile?id=12345");
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("GET");
conn.setAllowUserInteraction(false);
conn.setDoInput(true);
conn.setDoOutput(true);
conn.connect();
InputStream is = conn.getInputStream();


In the example above I cannot extract the file name from the URL, but the server will send me the file name in some way.

Answer Source

You could use HttpURLConnection.getHeaderField(String name) to get the Content-Disposition header, which is normally used to set the file name:

String raw = conn.getHeaderField("Content-Disposition");
// raw = "attachment; filename=abc.jpg"
if(raw != null && raw.indexOf("=") != -1) {
    String fileName = raw.split("=")[1]; //getting value after '='
} else {
    // fall back to random generated file name?
}

As other answer pointed out, the server might return invalid file name, but you could try it.