http : /.../ 파일을 다운로드하기 전에 크기를 확인하고 싶습니다. 파일은 웹 페이지, 이미지 또는 미디어 파일 일 수 있습니다. HTTP 헤더로이 작업을 수행 할 수 있습니까? 파일 HTTP 헤더 만 다운로드하려면 어떻게해야합니까?http 헤더에서 파일 크기를 얻는 방법
답변
예, 당신이 지원에 얘기 HTTP 서버를 가정 /이 있습니다 서버의 콘텐츠 크기를 확인하는 유일한 방법은 다운로드하는 것입니다. 특히 신뢰할만한 것은 아니므로 대부분의 서버에이 정보가 포함됩니다.
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 방법을 사용하는 것이 허용되지 않는 경우, 또는 콘텐츠 길이 헤더가 서버 응답에 존재하지 않는 :
위의'resp.ContentLength'는 HEAD 응답의 길이가 아니며 sizeof를 가져 오는 데 관심이있는 파일의 길이가 아닙니다. –
@Adam No. 설명서에 "ContentLength 속성에 응답과 함께 반환 된 Content-Length 헤더 값이 들어 있습니다." –
고마워요, 콘라드입니다. –
WebClient webClient = new WebClient();
webClient.OpenRead("http://stackoverflow.com/robots.txt");
long totalSizeBytes= Convert.ToInt64(webClient.ResponseHeaders["Content-Length"]);
Console.WriteLine((totalSizeBytes));
'using '을 사용하면 자동으로 삭제됩니다. http://msdn.microsoft.com/en-us/library/yh598w02(v=vs.110).aspx – justderb
매우 큰 파일 인'int'만으로이 파일을 사용한다면, 'long ContentLength;와'long.TryParse (xxx)'를 사용하여 2.14GB 이상의 크기 반환 값을 지원합니다. – Preston
http 압축을 사용하지 않으면 실제 파일 크기가 줄어 듭니까? – Justin