2012-06-12 7 views
11

HttpURLConnection을 사용하여 다운로드 한 파일의 이름을 가져올 수 있습니까? 나는 URL에서 파일 이름을 추출 할 수 있지만 서버가 어떤 식 으로든 나에게 파일 이름을 보내드립니다 위의 예에서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(); 

.

+0

환상적인 question.Whenever 우리는 즉시 URL 요청을 행사하는 것은,이 유스 케이스가 ... – sskumar86

답변

14

당신은 일반적으로 파일 이름을 설정하는 데 사용되는 Content-Disposition 헤더 얻을 HttpURLConnection.getHeaderField(String 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? 
} 

, 서버가 잘못된 파일 이름을 반환 할 수 있습니다,하지만 당신 그것을 시도 할 수있다.

+0

감사합니다.이 특정 서버는 get 매개 변수를 통해 요청 된 모든 파일에 대해 Content-Disposition을 보내는 것으로 보입니다. 직접 링크의 경우 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

서버는 어떤 방법으로 파일 이름을 보내는 중요한 것 중에 사실, 얻은 파일 이름을 확인하려고하면 I 웹 브라우저에서 동일한 링크를 사용합니다. 파일을 저장하라는 메시지가 표시되며 이름이 있습니다. 나는 그것을 가져 오는 방법을 모른다. – 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 ("]", ""); 
       } 
      }