我正在使用Wininet
下载图片并将其保存到内存流中,但出于更多管理原因,我希望仅允许下载gif images
和jpg
我尝试添加检查FURL但是从url
提取文件扩展名对我来说是不好的一步是我的wininet
函数
function DownloadToStream: Boolean;
var
hSession : HINTERNET;
hService : HINTERNET;
lpBuffer : array[0..1023] of Byte;
dwBytesRead : DWORD;
dwBytesAvail : DWORD;
dwTimeOut : DWORD;
Sessionname : String;
Setsession : Pwidechar;
begin
Result := False;
Sessionname := nameofsession;
Setsession := pwidechar(Sessionname);
hSession := InternetOpen(Setsession, INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0);
if not Assigned(hSession) then Exit;
try
hService := InternetOpenUrl(hSession, PChar(FUrl), nil, 0, 0, 0);
if hService = nil then
Exit;
try
dwTimeOut := 60000;
InternetSetOption(hService, INTERNET_OPTION_RECEIVE_TIMEOUT, @dwTimeOut, SizeOf(dwTimeOut));
if InternetQueryDataAvailable(hService, dwBytesAvail, 0, 0) then
repeat
if not InternetReadFile(hService, @lpBuffer[0], SizeOf(lpBuffer), dwBytesRead) then
Break;
if dwBytesRead <> 0 then
FMs.WriteBuffer(lpBuffer[0], dwBytesRead);
until dwBytesRead = 0;
Result := FMS.Size > 0;
finally
InternetCloseHandle(hService);
end;
finally
InternetCloseHandle(hSession);
end;
end;
答案 0 :(得分:4)
您可以发送HTTP HEAD请求并查看内容类型response header。如果是image/gif
则可以安全地假设资源是gif图像。当然,这需要正确配置的HTTP服务器。
作为(Delphi)的起点,请参阅:https://stackoverflow.com/a/9166393/80901
答案 1 :(得分:3)
这是必须从许多不同角度进行管理的事情。在此过程中没有任何一个地方可以检查以确保您只下载.gif
文件。
考虑...
http://somesite.com/Logo
这样没有扩展名的网址您需要考虑实施的是......
根据您的要求,这些都是完全不同的解决方案,您可能只需要使用一个,两个或全部三个。