2012-06-12 2 views
11

Возможно ли получить имя файла, загруженного с помощью HttpURLConnection?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(); 

В примере выше я не могу извлечь имя файла из URL, но сервер будет посылать мне имя файла в некотором роде.

+0

Фантастическая question.Whenever мы пытаемся определить имя файла, полученного при осуществлении URL запроса на лету, это случай использования будет значительным ... – sskumar86

ответ

14

Вы можете использовать HttpURLConnection.getHeaderField(String name), чтобы получить Content-Disposition заголовок, который обычно используется для установки имени файла:

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? 
} 

Как другой ответ указал, что сервер может вернуть недопустимое имя файла, но вы может попробовать.

+0

Спасибо, этот конкретный сервер, кажется, отправляет Content-Disposition для каждого файла, запрошенного через параметры get. Для прямых ссылок я просто проанализирую URL. – capitano666

+0

После извлечения имени файла из заголовка, откуда загрузить этот файл? Где будет файл? Пожалуйста, помогите мне. Благодарю. – Dharmendra

+0

@Dharmendra Вы можете использовать [URLConnection.getInputStream()] (http://docs.oracle.com/javase/6/docs/api/java/net/URLConnection.html#getInputStream()), чтобы получить входной поток и пишите в файл. –

4

Справедливый ответ: если веб-сервер не возвращает имя файла в заголовке Content-Disposition, нет реального имени файла. Возможно, вы можете установить его в последнюю часть URI после строки/и перед строкой запроса.

Map m =conn.getHeaderFields(); 
if(m.get("Content-Disposition")!= null) { 
//do stuff 
} 
+0

сервер отправляет имя файла в некотором роде, в самом деле, если я используйте ту же ссылку в веб-браузере. Мне предлагается сохранить файл, и у него есть имя. Я просто не знаю, как это получить. – capitano666

+1

Ну, тогда я уверен, что нижеприведенный фрагмент поможет! –

0

Проверить для Content-Disposition: заголовок вложения в ответе.

0
Map map = connection.getHeaderFields(); 
      if (map.get ("Content-Disposition") != null) 
      { 
       String raw = map.get ("Content-Disposition").toString(); 
       // raw = "attachment; filename=abc.jpg" 
       if (raw != null && raw.indexOf ("=") != -1) 
       { 
        fileName = raw.split ("=")[1]; // getting value after '=' 
        fileName = fileName.replaceAll ("\"", "").replaceAll ("]", ""); 
       } 
      } 
Смежные вопросы