2013-02-08 264 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