[英]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.