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