2015-01-26 4 views
1

전에 question에 질문했으며 Evgeniy Dorofeev에 답변했습니다. 비록 직접적인 연결을 위해 일했지만, 나는 그의 대답을 받아 들였다. 그는 단지 나에 대한 직접 링크에서 콘텐츠 형식을 확인했다 :URL에서 콘텐츠 유형 확인

  • 직접 링크 :

    String requestUrl = "https://dl-ssl.google.com/android/repository/android-14_r04.zip"; 
    URL url = new URL(requestUrl); 
    URLConnection c = url.openConnection(); 
    String contentType = c.getContentType(); 
    

    가 내가 아는을, 파일을 다운로드하는 방법은 두 URL 종류가 있습니다. 예 : https://dl-ssl.google.com/android/repository/android-14_r04.zip. 이 링크에서 데이터를 직접 다운로드하고 파일 이름 (이 링크에는 .zip 확장자)을 포함한 파일 이름을 얻을 수 있습니다. 그래서 우리는 어떤 파일을 다운로드해야하는지 알 수 있습니다. 해당 링크에서 다운로드를 시도 할 수 있습니다.

  • 우회 링크. 예 : http://www.example.com/directory/download?file=52378. Google 드라이브에서 데이터를 다운로드하려고 시도한 적이 있습니까? Google 드라이브에서 데이터를 다운로드하면 위 링크와 같은 간접 링크가 제공됩니다. 링크에 파일이나 웹 페이지가 포함되어 있는지 여부는 알 수 없습니다. 또한이 링크 유형이 불분명하고 무작위이기 때문에 파일 이름과 파일 확장명을 알 수 없습니다.

파일인지 웹 페이지인지 확인해야합니다. 콘텐츠 형식이 파일 인 경우 다운로드해야합니다.

그래서 내 질문 :

  • 은 어떻게 undirect 링크에서 콘텐츠 유형을 확인합니까?
  • 이 질문에 대한 의견에서 알 수 있듯이 HTTP 리디렉션이 문제를 해결할 수 있습니까?

도움 주셔서 감사합니다.

+1

가능한 해결책은 : [HttpClient를 리디렉션을 처리] (http://stackoverflow.com/questions/5169468/handling-httpclient-redirects) –

+0

당신이 undirect 링크가 무엇을 의미합니까? HTTP 리디렉션? – Mnementh

+0

이 문제에 대한 적절한 해결 방법을 얻었습니까? –

답변

5

URLConnection을 연 후 헤더 파일이 반환됩니다. 파일에 대한 정보가 있습니다. 거기에서 원하는 것을 끌어낼 수 있습니다. 예를 들어 :

URLConnection u = url.openConnection(); 
long length = Long.parseLong(u.getHeaderField("Content-Length")); 
String type = u.getHeaderField("Content-Type"); 

lengthtypeapplication/x-dosexec 또는 application/x-rar 같은 것입니다 바이트 파일의 크기입니다.

+0

'URLConnection' 클래스에서,'getHeaderField()'메소드는'Content-Type' 헤더 필드를 반환합니다. 이 메소드는,'getContentType()'와 같은 헤더 필드를 돌려줍니다. 죄송합니다.이 답변을 수락 할 수 없습니다. –

+0

그래서? 둘 다 잘 작동하기 때문에 문제가 무엇인지 알 수 없습니다. 어떤 문제가 발생 했습니까? – farukdgn

+0

이제 작동했습니다. 나는 서버에 두 번 연결했고 내 IP 주소에 대해 한 시간 정도 시간을 준다. 한 시간 후에 3 번 연결하면 서버에서 콘텐츠 형식을 .htm으로 반환합니다. 그래서 같은 IP로 1 시간 후에 다시 연결하려고하면 문제가 발생합니다. 당신의 도움을 주셔서 감사합니다! –

1

이러한 링크는 HTTP redirects을 사용하여 브라우저를 실제 콘텐츠로 리디렉션합니다. 올바른 콘텐츠 유형을 얻으려면 을 true (문서 번호 here)로 설정하여 HttpURLConnection에게 리디렉션을 따르라고 명령하면됩니다.

0

MimeTypeMap.getFileExtensionFromUrl (URL)