2013-02-12 7 views
5

Ich habe Server, der Parameter wie AWSAccessKeyID, ACL, Richtlinie, Signatur zum Hochladen von Datei an S3 mit POST wie hier generiert: http://doc.s3.amazonaws.com/proposals/post.html. Jetzt mit diesen Parametern muss ich diese Anfrage auf Amazon-Server irgendwie ausführen. Scheint, dass ich natives AWS iOS SDK nicht verwenden kann, weil es S3-Client nur mit AWS-Schlüssel und geheim initialisiert werden kann, die auf Server und nicht auf Gerät gespeichert werden.Amazon S3 POST-Upload in iOS

Wie kann diese POST-Anfrage mit allen Parametern in S3 zum Hochladen der Datei am besten aufgerufen werden? Oder vielleicht gibt es Möglichkeiten, AWS SDK dafür zu verwenden.

+1

Siehe hier: http://stackoverflow.com/questions/5537297/ios-how-to-perform-a-http-post-request –

+0

Dank . Ich denke, meine Frage war dumm, ich musste nachdenken, bevor ich fragte. Ich habe es geschafft, Dateien mit AFNetworking hochzuladen. –

+0

Sie sollten Ihre eigene Lösung als Antwort posten, falls jemand anders dieselbe Frage hat. –

Antwort

18

Ok, falls es hilft jemand, schaffte ich es auf diese Weise zu tun:

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]; 

Sie jede andere Art von Operation wie AFXMLRequestOperation verwenden können, falls erforderlich, weil S3 kehrt Antwort im XML-Format.

Wenn Parameter fehlen oder ungültige Daten enthalten sind - die Anfrage wird nicht akzeptiert. Hier

ist ein Link zu Hintergrundinformationen zu diesem Thema: Browser Uploads to S3 using HTML POST Forms

+0

Ich konnte nicht verstehen, "Politik" und "Unterschrift" Teil können Sie mir bitte einen Hinweis darauf geben? –

+0

Haben Sie den Link überprüft, den ich angehängt habe? Es gibt eine Tabelle mit allen erklärten Parametern, einschließlich der Richtlinien und der Unterschrift. –

+0

Ya Ich lese That Es löste mein Problem –