2008-09-23 15 views
56

http : /.../ 파일을 다운로드하기 전에 크기를 확인하고 싶습니다. 파일은 웹 페이지, 이미지 또는 미디어 파일 일 수 있습니다. HTTP 헤더로이 작업을 수행 할 수 있습니까? 파일 HTTP 헤더 만 다운로드하려면 어떻게해야합니까?http 헤더에서 파일 크기를 얻는 방법

답변

84

예, 당신이 지원에 얘기 HTTP 서버를 가정 /이 있습니다 서버의 콘텐츠 크기를 확인하는 유일한 방법은 다운로드하는 것입니다. 특히 신뢰할만한 것은 아니므로 대부분의 서버에이 정보가 포함됩니다.

+11

'using '을 사용하면 자동으로 삭제됩니다. http://msdn.microsoft.com/en-us/library/yh598w02(v=vs.110).aspx – justderb

+2

매우 큰 파일 인'int'만으로이 파일을 사용한다면, 'long ContentLength;와'long.TryParse (xxx)'를 사용하여 2.14GB 이상의 크기 반환 값을 지원합니다. – Preston

+0

http 압축을 사용하지 않으면 실제 파일 크기가 줄어 듭니까? – Justin

25

HTTP 헤더로이 작업을 수행 할 수 있습니까?

네,이 방법이 있습니다. 정보가 제공된 경우 헤더에 Content-Length으로 표시됩니다. 그러나 이것이 반드시 그런 것은 아닙니다.

GET 대신 HEAD 요청을 사용하여 헤더 만 다운로드 할 수 있습니다. 아마 다음 코드는 데 도움이 :

HttpWebRequest req = (HttpWebRequest)WebRequest.Create("http://example.com/"); 
req.Method = "HEAD"; 
long len; 
using(HttpWebResponse resp = (HttpWebResponse)(req.GetResponse())) 
{ 
    len = resp.ContentLength; 
} 

을 주목 HttpWebResponse 개체의 콘텐츠 길이에 대한 속성이 - 필요가 수동으로 Content-Length 헤더를 구문 분석 없습니다. ,

System.Net.WebRequest req = System.Net.HttpWebRequest.Create("http://stackoverflow.com/robots.txt"); 
req.Method = "HEAD"; 
using (System.Net.WebResponse resp = req.GetResponse()) 
{ 
    int ContentLength; 
    if(int.TryParse(resp.Headers.Get("Content-Length"), out ContentLength)) 
    { 
     //Do something useful with ContentLength here 
    } 
} 

는 HEAD 방법을 사용하는 것이 허용되지 않는 경우, 또는 콘텐츠 길이 헤더가 서버 응답에 존재하지 않는 :

+0

위의'resp.ContentLength'는 HEAD 응답의 길이가 아니며 sizeof를 가져 오는 데 관심이있는 파일의 길이가 아닙니다. –

+1

@Adam No. 설명서에 "ContentLength 속성에 응답과 함께 반환 된 Content-Length 헤더 값이 들어 있습니다." –

+1

고마워요, 콘라드입니다. –

0
WebClient webClient = new WebClient(); 
webClient.OpenRead("http://stackoverflow.com/robots.txt"); 
long totalSizeBytes= Convert.ToInt64(webClient.ResponseHeaders["Content-Length"]); 
Console.WriteLine((totalSizeBytes));