ios将文件上传到亚马逊s3

时间:2013-02-08 19:53:10

标签: ios amazon-s3

我正在开发一个ios应用程序,需要能够将文件上传到亚马逊s3但我遇到了一些问题。该函数设法在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];
}

这会在s3上的存储桶中创建关键路径staging / videos /,但文件不在那里。我也尝试使用图像文件。我已经检查过以确保我试图推高的数据不是零。 我从服务器获得的xml响应表示内容长度为0。 我也尝试过s3 sdk的多部分方法,结果相同。 谁能看到我做错了什么?

1 个答案:

答案 0 :(得分:3)

我显然对这个回复很晚了,但是如果将来有其他人遇到这个问题,那你就错误地构建了你的请求。

通过做:

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

在密钥末尾加一个反斜杠,你创建的是一个文件夹,而不是一个文件。您需要使用包含后缀ex @"staging/videos/video.mp4"

的文件名来结束密钥