0

我正在使用Amazon S3 AFNetworking 客户端尝试将文件上传到 S3,但遇到了麻烦。在模拟器中运行时收到错误的 URL 响应,在设备上运行时收到 405 响应。收到 405 响应时,日志表明 100% 的文件已上传。我不确定我是否正确。这是我的代码:

    AFAmazonS3Client *s3Client = [[AFAmazonS3Client alloc] initWithAccessKeyID:kAccessKeyID
                                                                        secret:kSecret];
    s3Client.bucket = kBucket;

    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documents = [paths objectAtIndex:0];
    NSString *path = [documents stringByAppendingPathComponent:@"test.jpeg"];

    [s3Client postObjectWithFile:path parameters:nil progress:^(NSInteger bytesWritten, long long totalBytesWritten, long long totalBytesExpectedToWrite) {
        NSLog(@"%f%% Uploaded", (totalBytesWritten / (totalBytesExpectedToWrite * 1.0f) * 100));
    } success:^(id responseObject) {
        NSLog(@"Upload Complete");
    } failure:^(NSError *error) {
        NSLog(@"Error: %@", error);
    }];
4

1 回答 1

0

只是猜测,但

AFAmazonS3Client *s3Client = [[AFAmazonS3Client alloc] initWithAccessKeyID:@"kAccessKeyID"
                                                                    secret:@"kSecret"];

kAccessKeyId / kSecret 是常量,是吗?通常,您将常量定义为

#define kAccessKeyId @"myKeyId"

所以你不想在它们周围添加额外的引号。我真的很惊讶编译器允许它。你的线应该看起来更像

AFAmazonS3Client *s3Client = [[AFAmazonS3Client alloc] initWithAccessKeyID:kAccessKeyID
                                                                    secret:kSecret];

其他一些常规调试:

  • 注销您尝试访问的路径并确保您有适当数量的斜杠。
  • 405 错误通常表示您用于访问特定 URL 的方法无效。你真的可以发帖吗/你有发帖的权限吗?这又回到了我的观点,即您可能在不需要双引号时意外添加了双引号,因此无法正确访问您的 S3 存储。
于 2012-07-04T02:55:41.097 回答