2013-02-08 184 views
0

我正在研究一個需要能夠上傳文件到亞馬遜s3的ios應用程序,但我遇到了一些問題。該函數管理在s3存儲桶中創建正確的密鑰或路徑,但文件本身不會上傳到其中。下面是選項我都試過ios上傳文件到亞馬遜s3

if (self.s3 == nil) { 
     self.s3 = [[AmazonS3Client alloc] initWithAccessKey:[Config getS3Key] withSecretKey:[Config getS3Secret]] ; 

    } 
    [self performSelectorInBackground:@selector(processBackgroundThreadUploadInBackground:) 
          withObject:params]; 

} 


- (void)processBackgroundThreadUploadInBackground:(NSMutableDictionary *)params 
{ 


    S3PutObjectRequest *por = [[S3PutObjectRequest alloc] initWithKey:@"staging/videos/" inBucket:@"aaa.aaaaa.com"]; 
    por.contentType = @"video/mp4"; 
    por.data  = [NSData dataWithContentsOfURL:[NSURL URLWithString:[params valueForKey:@"takeurl"]]]; 

// por.contentType = @"image/png"; 
// por.data  = [params valueForKey:@"takeimage"]; 


    S3PutObjectResponse *putObjectResponse = [self.s3 putObject:por]; 
    [self performSelectorOnMainThread:@selector(showCheckErrorMessage:) 
          withObject:putObjectResponse.error 
         waitUntilDone:NO]; 
} 

這會在關鍵路徑分期1碼/視頻/ S3的水桶內,但該文件不存在。我也試過這個圖像文件。我已經檢查過,以確保我試圖推高的數據不是零。 我從服務器獲得的xml響應表示內容長度爲0。 我也嘗試了從s3 sdk獲得相同結果的多部分方法。 任何人都可以看到我做錯了什麼?

+0

使用AWS Java SDK時,AmazonS3Client的文檔說明必須設置Content-Length。也許這是要檢查的東西? – 2013-02-08 22:39:04

+0

害怕設置objectrequest的內容長度與數據長度沒有任何區別。非常感謝 – glogic 2013-02-09 05:15:15

+0

@glogic你能找出答案 – 2013-09-28 18:23:50

回答

3

我很明顯真的很遲纔回應,但爲了以防萬一以後有人遇到這個問題,你就錯誤地構建了你的請求。

這樣做:

S3PutObjectRequest *por = [[S3PutObjectRequest alloc] initWithKey:@"staging/videos/" inBucket:@"aaa.aaaaa.com"]; 

與你的關鍵的最後一個反斜槓,你正在創建一個文件夾,而不是文件。您需要結束包含後綴的文件名,例如@"staging/videos/video.mp4"

+0

是的,忘了回到這個。這是我的一個簡單的錯誤 – glogic 2014-04-09 17:42:28