Bir http: /.../ dosyasının boyutunu, indirmeden önce almak istiyorum. Dosya bir web sayfası, resim veya bir medya dosyası olabilir. Bu HTTP üstbilgileri ile yapılabilir mi? Sadece HTTP üstbilgisini nasıl indirebilirim?http başlıklarından dosya boyutu nasıl elde edilir
cevap
Evet, desteklerin konuştuğunuz HTTP sunucusunu varsayarak/Bu veriyor Sunucudaki içeriğin boyutunu belirlemenin tek yolu onu indirmektir. Bu özellikle güvenilir olmadığından, çoğu sunucu bu bilgileri içerecektir.
Bu, HTTP üstbilgileriyle yapılabilir mi?
Evet, işte bu yol. bilgisi varsa, Content-Length
olarak üstbilgide bulunur. Bununla birlikte, bunun mutlaka gerekli olmadığını unutmayın.
Yalnızca üstbilgi indirme işlemi GET
yerine HEAD
isteği kullanılarak yapılabilir. Belki şu kod yardımcı olur:
HttpWebRequest req = (HttpWebRequest)WebRequest.Create("http://example.com/");
req.Method = "HEAD";
long len;
using(HttpWebResponse resp = (HttpWebResponse)(req.GetResponse()))
{
len = resp.ContentLength;
}
Bildirimi HttpWebResponse
nesne üzerinde içerik uzunluğu için özelliği - gerek elle Content-Length
başlığını ayrıştırmak. ,
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
}
}
BAŞ yöntemi kullanılarak izin verilmez ise veya içerik-uzunluk başlığı sunucu cevapta mevcut değildir:
Will değil 'size BAŞ yanıtın uzunluğunu göre değil, sizeof almakla ilgi dosyasının uzunluğu vermek için yukarıdaki resp.ContentLength'? –
@Adam No. Belgeler şunları söylüyor: “ContentLength özelliği, yanıtla döndürülen Content-Length başlığının değerini içerir.” –
Doğru, teşekkürler Konrad. –
WebClient webClient = new WebClient();
webClient.OpenRead("http://stackoverflow.com/robots.txt");
long totalSizeBytes= Convert.ToInt64(webClient.ResponseHeaders["Content-Length"]);
Console.WriteLine((totalSizeBytes));
Eğer 'using' kullanıyorsanız, otomatik olarak onu atar. http://msdn.microsoft.com/tr-tr/library/yh598w02(v=vs.110).aspx – justderb
Başka bir not, eğer bu son derece büyük dosyalar için kullanılıyorsa, int 'yeterli olmaz, ihtiyacınız olacak Uzun ContentLength, 've' long.TryParse (xxx) 'i kullanmak için 2.14GB boyutundaki bir dönüş değerinden daha fazlasını destekleyin. – Preston
http sıkıştırması etkin değil gerçek dosya boyutunu atmak değil mi? – Justin