2014-11-30 6 views
-1

У меня есть система, которая работает с FTP через SSL в Delphi XE5, но я планирую перейти на Amazon S3. Я пытаюсь сделать простой набор значков, которые будут устанавливать параметры, подключать, помещать файлы в ведро и отключать.от ftp ssl до Amazon S3

Прямо сейчас я делаю это с IDFTP

ftp := TIdFTP.Create(); 
    ssl := TIdSSLIOHandlerSocketOpenSSL.Create(ftp); 
    ftp.IOHandler := ssl; 
    ssl.SSLOptions.Method := sslvSSLv23; 
    ftp.UseTLS := utUseExplicitTLS; 
    ftp.Host := 'myftpserver.com'; 
    ftp.Username := 'user'; 
    ftp.Password := 'password'; 
    ftp.Passive := true; 
    ftp.Connect; 
    ftp.ChangeDir(destinefolder); 

for i := 1 to3 do  
begin    //upload file1.jpg, file2.jpg, file3.jpg 
ftp.put (local + ‘file’ + inttostr(i) + ’.jpg’ , ‘file’ + inttostr(i), true, false); 
end; 

ssl.Free; 
ftp.Free; 

Он работает хорошо для FTPS.

Я читал людей, говорящих, что можно использовать IDhttp для Amazon S3.

Интересно, есть ли простой способ адаптировать мои ftps к amazon s3.

+0

Так что же является актуальной проблемой у вас возникли? Вы должны быть более конкретными, не просто бросать кучу кода, не объясняя, что он делает (или не делает). Вы получаете ошибки? Если так, то кто они? Вы получаете неожиданное поведение? Если да, то что это такое и чего ожидать? Что вы пытались устранить проблему до сих пор? –

+0

Извините. У меня есть два примера проектов на Delphi, которые обеспечивают доступ к S3: Cloud Explorer, который отлично работает, и пример PC Plus S3 (http://www.itwriting.com/s3.php), который правильно отображает ведра (не получается файлы и объекты списка). Но даже в этом случае они слишком сложны для того, что мне нужно. Мне нужно только положить файлы в ведро. У меня есть: Ключ доступа Ключ секретного доступа Bucket name Имя файла Этого должно быть достаточно для загрузки файла. Мне нужно знать, как построить строку, я думаю, использовать IDHTTP.Put (... для отправки файла на сервер Amazon S3. –

ответ

1

На основе документации AWS:

PUT Object

Authenticating a Request in the Authorization Header

Попробуйте это:

Auth := '...'; // calculate/format based on Access Key Id Secret Access Key... 

for i := 1 to 3 do  
begin   
    FS := TFileStream.Create(local + 'file' + inttostr(i) + '.jpg', fmOpenRead or fmShareDenyWrite); 
    try 
    IdHTTP1.Request.CustomHeaders.Values['Authorization'] := Auth; 
    IdHTTP1.Request.BasicAuthentication := False; 
    IdHTTP1.Request.Date := ...; 
    IdHTTP1.Request.Expect := '100-continue'; 
    IdHTTP1.Request.ProtocolVersion := pv1_1; 
    // other headers as needed... 
    ... 
    IdHTTP1.Put('http://'+BucketName+'.s3.amazonaws.com/file' + inttostr(i), FS); 
    finally 
    FS.Free; 
    end; 
end; 
Смежные вопросы