使用Delphi从Amazon下载文件

问题描述 投票:1回答:2

我正在使用API​​为我提供文件的URL,我希望使用Delphi XE将文件下载到文件或流。

网址采用以下形式: -

https://xxxxxxx.s3-us-west-2.amazonaws.com/xxx/Reports/414_20160114021919.pdf?AWSAccessKeyId=xxxxxxxxxxxxxx&Expires=1478915858&response-content-disposition=attachment%3Bfilename%3D%22123%20Test%20St%20Dallas__2016_01_14_03_16_00.pdf%22&Signature=xxxxxxxxxxx%3D

我有xxxxxxxxx的敏感安全的东西。

如果我将网址粘贴到Chrome中,它会找到该文件并显示保存对话框。

在我的Delphi程序中,我正在使用带有以下代码的URLMon(很高兴地窃听并改编自SO的类似问题的答案): -

function TdmXXXXXXXXX.DownloadFile(AURL, AExtWithDot: string): string;
// returns temp file name or empty string if failed;
var
  sTempFileName: string;
  iError: integer;
begin
  sTempFileName := apmDM.GetTempFileName(AExtWithDot, True);
  iError := UrlDownloadToFile(nil, PChar(AURL), PChar(sTempFileName), 0, nil);
  if iError = S_OK then
    Result := sTempFileName
  else
    Result := '';
  showmessage(SysUtils.IntToHex(iError,8));
end;

showmessage返回“800C000D”

在URLMon: -

$EXTERNALSYM INET_E_UNKNOWN_PROTOCOL}
INET_E_UNKNOWN_PROTOCOL            = HResult($800C000D);

所以我假设问题与“?”之后的东西有关。在URL中,“AWSAccessKeyId =”等。

不知道从哪里开始 - 在这里和谷歌先生一起搜索......

干杯杰夫

delphi amazon-web-services
2个回答
0
投票

虽然你通常会找到指向Indy TIdHTTP组件的指针,但我个人最喜欢的是包括Microsoft XML库(MSXML2_TLB)和使用XmlHTTPRequest组件。如果你在它的responseStream属性上使用TStreamAdapter,你将拥有一个通过URL的资源流。


0
投票

我抓了所有的东西,从头开始重新开始。

这一切都使用URLMon和URLDownloadToFile(nil, PChar(sReportURL), PChar(sTempFileName), 0, nil);

我仔细研究了代码,看不出报告的问题代码和最终代码之间的区别。

© www.soinside.com 2019 - 2024. All rights reserved.