0

我正在开发一个需要能够将文件上传到亚马逊 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];
}

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

4

1 回答 1

3

我显然很晚才做出这个回应,但以防万一其他人将来遇到这个问题,你的请求结构是错误的。

通过做:

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

在您的密钥末尾带有反斜杠,您正在创建一个文件夹,而不是一个文件。您需要以包含后缀 ex 的文件名结束您的密钥@"staging/videos/video.mp4"

于 2014-04-09T17:21:48.733 回答