【问题标题】:how to get remote file size in bytes or kilobytes?如何以字节或千字节为单位获取远程文件大小?
【发布时间】:2013-03-29 09:05:06
【问题描述】:

我的问题和这个问题一样:

Get http:/…/File Size

但我的问题是Content-Length 属性包含响应返回的Content-Length 标头的值,而不是确切的文件大小。

我尝试使用FileInfo,但它只能将本地文件名作为参数 - 而不是远程文件。

谁能告诉我如何获取以字节或千字节为单位的远程文件大小?

【问题讨论】:

  • 正如@mdb 在他对您链接的问题的回答中所说,如果内容长度不存在或不正确,则准确知道文件大小的唯一方法是下载它。您是否通过 fiddler 或任何其他 http 调试工具检查了 HTTP 响应,以查看 Content-Length 标头是否与您在代码中获得的值相同?
  • 是的,当我匹配该值时。我正在下载的文件大小为 5.49 MB,内容长度显示为数字 1448。
  • 你能发布一个代码示例,也许还有 HTTP 请求和响应?您可以使用您喜欢的浏览器的调试工具(按 F12 键并查找“网络”选项卡)或 Fiddler (fiddler2.com/fiddler2)。
  • HttpWebRequest wrq = (HttpWebRequest)WebRequest.Create(Prg.source_path); HttpWebResponse wrs = null; try { // HttpWebRespose 的对象创建 wrs = (HttpWebResponse)wrq.GetResponse(); // 调用下载文件运行它没有身份验证 long l = wrs.ContentLength; } catch (System.Net.WebException protocolError) {} 这里 l 包含内容长度,但我希望总文件大小为 5.49 MB 或以 KB 为单位。

标签: c# http


【解决方案1】:

好的,我试试看

先试试这段代码:

//I am assuming Prg.source_path is the url of the file you want
// Something like : http://www.example.com/my_file.zip
HttpWebRequest wrq = (HttpWebRequest)WebRequest.Create(Prg.source_path); 
//You should be getting only the response header
wrq.Method = "HEAD";

using(var wrs = (HttpWebResponse)wrq.GetResponse()){
    //Do something logic here...
    Console.WriteLine("Content Length is : {0}", wrs.ContentLength);
}

请确保您尝试下载的文件的 url 是文件的 DIRECT url。如果您被重定向到另一个位置,响应的标头将是重定向响应的大小。

如果该代码仍然无法为您提供正确的文件大小,我的猜测是您要么被重定向,要么响应确实有缺陷且不准确(这不太可能,但可能)。

您能否提供您尝试下载的文件的网址,或者至少提供您发送和获取的请求和响应?

EDIT 02/04/2013:还要检查这个问题:CSS, Javascript and Images have zero length

查看 Adrian Grigore 的答案,检查“控制面板 -> Windows 功能 -> 万维网服务 -> 通用 HTTP 功能 -> 静态内容”是否被选中。如果没有,请检查它,重新启动 IIS(或整个机器,你永远不知道),然后重试。

【讨论】:

  • 什么类型的网络服务器托管图像?图像是否生成? “测试”是文件夹还是某个控制器名称?
  • 当前我正在使用 IIS 服务器。图像类型可以是任何人(不具体)。并测试保存图像的文件夹。
【解决方案2】:

我知道这是一篇旧帖子。也许我没有清楚地理解 C# 代码或误解了这个问题。如果我做对了,他想以字节为单位获取远程文件的大小?我使用这个 VB.NET 代码,它对我有用:

Imports System.Net
    
Dim theResponse As HttpWebResponse
Dim theRequest As HttpWebRequest
theRequest = WebRequest.Create("https://www.yoururl.co.za/" & YourFilename)
theResponse = theRequest.GetResponse
Dim FileSizeInBytes As Long = theResponse.ContentLength

希望这对某人有所帮助。

【讨论】:

    猜你喜欢
    • 2010-10-08
    • 2019-02-18
    • 1970-01-01
    • 1970-01-01
    • 2013-02-06
    • 2012-02-17
    • 1970-01-01
    • 2013-09-12
    • 1970-01-01
    相关资源
    最近更新 更多