请教一个程序的思路。。。(高难度)(100分)

  • 主题发起人 hongxang
  • 开始时间
H

hongxang

Unregistered / Unconfirmed
GUEST, unregistred user!
程序要求:
输入一个url(链接地址,一般为rar的压缩文件,文件大小在1兆至2g之间),判断能否下载(地址是否有效)。如果无效返回一个参数0,如果有效,再判断这个文件是否大于1兆,如果小等于1兆返回1,如果大于1兆返回2.
各位大虾有办法吗?
 
HTTP有HEAD方法可以做到,不过不一定能获取文件大小,这与服务器程序有关
 
同意楼上
 
我觉得,文件大小控制在上传时进行控制
 
to weiwei81123
我知道判断头部的方法,但不知道如何判断大小
to ljlljl-79
我是要判断远程的文件,一个链接地址,并不上传 。
 
如果返回的头里面有Content-Length项,它就是文件大小,如果没有就没办法了
 
function TxxxxxxxReport.DownloadFile(const remoteurl: string;
Stream: TStream;
do
wnloadTitle: string): Boolean;
var
NetHandle: HINTERNET;
UrlHandle: HINTERNET;
BytesRead: DWORD;
Buffer: array[1..8192] of Char;
HaveRead: DWORD;
lpdwlen, lpdwidx, lpdword: DWord;
begin
Result := false;
NetHandle := InternetOpen(
'hfghfghfg 我爱啃猪脚',
INTERNET_OPEN_TYPE_DIRECT,
nil,
nil,
0);
if Assigned(NetHandle) then
begin
UrlHandle := InternetOpenUrl(
NetHandle,
PChar(remoteurl),
nil,
0,
INTERNET_FLAG_RELOAD,
0);
if Assigned(UrlHandle) then
begin
HaveRead := 0;
lpdword := 0;
lpdwlen := 4;
lpdwidx := 0;
HttpQueryInfo(UrlHandle, HTTP_QUERY_CONTENT_LENGTH or HTTP_QUERY_FLAG_NUMBER, @lpdword, lpdwlen, lpdwidx);
repeat
FillChar(Buffer, 8192, 0);
InternetReadFile(UrlHandle, @Buffer[1], SizeOf(Buffer), BytesRead);
Stream.Write(Buffer[1], bytesread);
HaveRead := HaveRead + bytesread;
//// hintProgress(DownloadTitle, round(HaveRead * 100 / lpdword));
until BytesRead = 0;
result := true;
//// hintProgress(DownloadTitle, 0);
end;
InternetCloseHandle(UrlHandle);
end;
InternetCloseHandle(NetHandle);
end;
 
to hfghfghfg
以你的程序,如果下载的文件很大,判断速度是不是很慢 ?
 
connect to 主机。
GET /download/license/dotnet/867530974D4A43CB95FF11F2B6474163/netadvantage41.zip HTTP/1.1
Host: 。。。
Accept: */*
User-Agent: Mozilla/4.0 (compatible;
MSIE 5.00;
Windows 98)
Pragma: no-cache
Cache-Control: no-cache
Connection: close
------------------------
HTTP/1.1 200 OK // 就是存在,不是2开头的就是不存在。
Server: Microsoft-IIS/5.0
X-Powered-By: ASP.NET
Connection: close
Date: Tue, 17 Feb 2004 05:38:52 GMT
Content-Type: application/x-zip-compressed
Accept-Ranges: bytes
Last-Modified: Wed, 04 Feb 2004 21:24:15 GMT
ETag: "bc23633d65ebc31:14b6"
Content-Length: 193388527 //文件大小
两个回车之后,开始接受数据!
 
有“IE6下载补丁”的源码,可以好好看一下。
http://www.euromind.com/iedelphi
 
借楼主宝地,打打广告,谢谢!
阳春三月,和Borland专家--刘艺相约上海!
大家好:
 “一年之计在于春”,春天是定目标、打基础关键时刻!
无论你的目标是加薪,成为项目经理,还是让自己的技术水平更上一层楼,
都需要不断地学习,而与高手的交流,仿佛是站在巨人的肩上:站得高,看得远,助力你迅速成为Delphi高手!
应中国项目经理网邀请,Borland专家--刘艺老师将于这个三月来到上海
给大家做<<UML与DELPHI模型驱动开发>>的培训,机会难得!请热爱Delphi的朋友请抓紧时间报名!
届时将会有众多Delphi高手光临现场!热烈的现场讨论以及众多Delphi高手的面对面交流讲师本次培训的特色之一!
在温暖的三月,刘艺与众多Delphi高手与大家相约上海!

中国项目经理网相关培训链接:
[公告]阳春三月,和刘艺老师面对面讨论UML和Delphi面向对象开发!
http://www.china-pm.net/dispbbs.asp?boardID=22&amp;ID=5&amp;page=1
[公告]uml与delphi模型驱动开发课程介绍
http://www.china-pm.net/dispbbs.asp?boardID=22&amp;ID=21&amp;page=1
报名表
http://www.china-pm.net/dispbbs.asp?boardID=22&amp;ID=35&amp;page=1
中国项目经理网
2004-02-14
 
顶部