2013-02-12 38 views
5

AWSAccessKeyID, acl, policy, POST kullanarak S3'e dosya yüklemek için imza gibi parametreler üreten bir sunucum var: http://doc.s3.amazonaws.com/proposals/post.html. Şimdi bu parametrelere sahip olmak bu isteği bir şekilde Amazon sunucusunda çalıştırmam gerekiyor. Yerel AWS iOS SDK'yı kullanamayacağımı gösteriyor çünkü S3 istemcisi sadece sunucuda değil, cihazda saklanan AWS anahtarı ve gizli ile başlatılabilir.Amazon S3 POST yüklemesi iOS

Bu POST isteğini S3'deki tüm dosyalarla karşıya yüklemek için en iyi yol nedir? Ya da bunun için AWS SDK kullanmanın yolları vardır.

+1

Buraya bakın: http://stackoverflow.com/questions/5537297/ios-how-to-perform-a-http-post-request –

+0

Teşekkür İşte

bu arka plan bilgi bağlantısıdır . Sanırım sorum benim için aptalca, sormadan önce düşünmek zorundaydım. AFNetworking kullanarak dosya yüklemeyi başardım. –

+0

Başka birinin aynı soruna sahip olması durumunda kendi çözümünüzü cevap olarak göndermelisiniz. –

cevap

18

Tamam, durumda, birileri yardımcı olur, ben bu şekilde yapmayı başardı:

NSDictionary* parametersDictionary = @{@"AWSAccessKeyId" : @"YOUR_KEY", 
                @"acl" : @"public-read", // or whatever you need 
                @"key" : @"filename.ext", // file name on server, without leading/
               @"policy" : @"YOUR_POLICY_DOCUMENT_BASE64_ENCODED", 
              @"signature" : @"YOUR_CALCULATED_SIGNATURE" 
            }; 

AFHTTPClient *httpClient = [[AFHTTPClient alloc] initWithBaseURL:[NSURL URLWithString: @"http://s3-bucket.s3.amazonaws.com"]]; 
NSMutableURLRequest *request = [httpClient multipartFormRequestWithMethod:@"POST" 
                    path:nil 
                   parameters:parametersDictionary 
               constructingBodyWithBlock: ^(id <AFMultipartFormData>formData) { 
                [formData appendPartWithFileData:fileData 
                       name:@"file" //N.B.! To post to S3 name should be "file", not real file name 
                      fileName:@"your_filename" 
                      mimeType:@"mime/type"]; 
               }]; 
AFHTTPRequestOperation* operation = [[AFHTTPRequestOperation alloc] initWithRequest:request]; 

Sen AFXMLRequestOperation gibi operasyon başka türlü kullanabilirsiniz gerekirse S3 XML formatında yanıtı döndürdüğü için.

Herhangi bir parametre eksikse veya geçersiz veriler içeriyorsa - istek kabul edilmeyecektir. Browser Uploads to S3 using HTML POST Forms

+0

"Politika" ve "İmza" bölümünü anlayamadım, lütfen bana bu konuda bir ipucu verebilir misiniz? –

+0

Eklediğim bağlantıyı kontrol ettiniz mi? Politika ve imza dahil olmak üzere tüm parametrelerin açıklandığı bir tablo var. –

+0

Ya Okuduğumu Okudum Sorunumu çözdü –