在下载之前,使用delphi以编程方式从远程文件中获取文件大小

Sal*_*dor 6 delphi

在下载之前,如何使用Delphi确定Web中托管的远程文件的大小(以字节为单位)?

提前致谢.

ulr*_*chb 11

你可以使用Indy.

首先包括IdHTTP.

您可以通过这种方式检索大小:

procedure TFormMain.Button1Click(Sender: TObject);
var
  Http: TIdHTTP;
begin
  Http := TIdHTTP.Create(nil);
  try
    Http.Head('http://live.sysinternals.com/ADExplorer.exe');

    ShowMessage(IntToStr(Http.Response.ContentLength));
  finally
    Http.Free;
  end;
end;
Run Code Online (Sandbox Code Playgroud)


PA.*_*PA. 10

简短回答:使用Indy Delphi的TIdHttp组件中提供的HTTP HEAD命令.

细节:

HTTP协议定义了一种HEAD方法.

9.4头

HEAD方法与GET相同,只是服务器不能在响应中返回消息体.响应HEAD请求的HTTP头中包含的元信息应该与响应GET请求时发送的信息相同.该方法可用于获得关于请求所暗示的实体的元信息,而无需转移实体主体本身.此方法通常用于测试超文本链接的有效性,可访问性和最近的修改.

对于HEAD请求的响应可以是可缓存的,因为响应中包含的信息可以用于从该资源更新先前缓存的实体.如果新的字段值指示缓存的实体从当前实体的不同(如将在内容长度,内容,MD5,ETag的或上次修改的变化来表示),那么缓存必须把缓存条目为陈旧.

HEAD要求响应与对应于GET请求的响应相同,但没有响应主体,检索完整的响应头,而不是整个内容.

检索到的HTTP响应标头记录在Wikipedia上的HTTP标头列表中. http://en.wikipedia.org/wiki/List_of_HTTP_headers

HTTP标头构成HTTP请求的核心,在HTTP响应中非常重要.它们定义了所请求数据的各种特征或已提供的数据.标题通过空行与请求或响应正文分隔.HTTP标头可以是接近任意的字符串,但通常只能理解一些字符串.

始终为有效URL检索内容的Content-Length标头之一是标头.

14.13内容长度

内容长度实体头字段指示实体主体的大小,以字节为单位的十进制数,发送到接收方,或在HEAD方法的情况下,这将被发送的实体主体的大小有请求是GET.

Content-Length = "Content-Length" ":" 1*DIGIT

一个例子是

Content-Length: 3495

应用程序应该使用此字段来指示消息正文的传输长度,除非4.4节中的规则禁止这样做.

任何大于或等于零的Content-Length都是有效值.第4.4节描述了如果没有给出Content-Length,如何确定消息体的长度.

请注意,此字段的含义与MIME中的相应定义明显不同,后者是"message/external-body"内容类型中使用的可选字段.在HTTP中,只要在传输之前确定消息的长度,就应该发送它,除非第4.4节中的规则禁止这样做.

从Delphi中,将TIdHttp组件拖放到表单中.并将以下代码粘贴到您的一个delphi事件处理方法中.

var 
  url: string;  // must contain a fully qualified url
  contentLength: integer;
begin
  ....
  contentLength:=0;
  try
    Idhttp1.Head(url);
    contentLength:=idhttp1.response.ContentLength;
  except end;
  ....
Run Code Online (Sandbox Code Playgroud)