作者热门文章
- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我正在使用 Wininet
下载图像并将它们保存到内存流,但出于更多管理原因,我只想允许 gif 图像
和 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;
最佳答案
您可以发送 HTTP HEAD 请求并查看内容类型 response header .如果它是 image/gif
那么可以安全地假设该资源是一个 gif 图像。当然,这需要正确配置的 HTTP 服务器。
作为 (Delphi) 的起点,请参阅:https://stackoverflow.com/a/9166393/80901
关于delphi - 如何让wininet只下载gif图片,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32261030/
我是一名优秀的程序员,十分优秀!