繁体   English   中英

使用临时安全凭证使用Delphi将文件上载到Amazon S3

[英]Upload files to Amazon S3 with Delphi using temporary security credentials

我有一个AWS S3帐户,并获得了SecretAccessKey,SessionToken,Expiration,AccessKeyId项目。 我想以最简单的方式将一些文件上传到云端。

已经阅读了一些关于授权标题的文档( http://docs.aws.amazon.com/AmazonS3/latest/API/sigv4-auth-using-authorization-header.html )但仍然不了解如何构建它们))

另外,看了一下Indy的另一个例子,所以,请帮助用我拥有的这些项构建授权头:SecretAccessKey,SessionToken,Expiration,AccessKeyId。 可以使用“在单个块中传输有效负载”模式+“签名有效负载选项”。

  FS := TFileStream.Create('c:\myfile.txt', fmOpenRead or fmShareDenyWrite);
  try
    IdHTTP1.Request.CustomHeaders.Values['Authorization'] := ...; // please help
    IdHTTP1.Request.BasicAuthentication := False;
    IdHTTP1.Request.Date := ...;   //what should I enter here?
    IdHTTP1.Request.Expect := '100-continue';
    IdHTTP1.Request.ProtocolVersion := pv1_1;
    ...
    IdHTTP1.Put('http://'+BucketName+'.s3.amazonaws.com/myfile.txt', FS);
  finally
    FS.Free;
  end;

谢谢!

以下是使用云组件将文件上传到Amazon的常规操作:

function UploadFile(File: TBytes; FileName: string; Bucket: string): boolean;
var Service: TAmazonStorageService;
    ConAmazon: TAmazonConnectionInfo;
begin
  try
    ConAmazon := TAmazonConnectionInfo.Create(nil);
    ConAmazon.AccountKey := 'Dih71bG09****************';
    ConAmazon.AccountName := 'AKIA***********';
    ConAmazon.QueueEndpoint := 'queue.amazonaws.com';
    ConAmazon.StorageEndpoint := 's3-eu-west-1.amazonaws.com';
    ConAmazon.TableEndpoint := 'sdb.amazonaws.com';
    ConAmazon.UseDefaultEndpoints := False;
    Service := TAmazonStorageService.Create(ConAmazon);
    Result := Service.UploadObject(Bucket, FileName, File, TRUE, nil, nil, amzbaPrivate, nil);
  finally
    ConAmazon.Free;
    Service.Free;
  end;
end;

好的,所以,最后我们解决了这个问题:

1.应使用来自Delphi10.1 Berlin的Data.Cloud。 它支持Amazon AWS4安全标准。 2.应该通过添加以下代码来修补TAmazonStorageService.InitHeaders:在标头中启用临时会话令牌使用:

...    
Result.Values['x-amz-security-token'] := //your session_token string; 
...

从多方面测试它,现在工作正常:)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM