如何将文件上传到Amazon S3并使用iOS获取响应的URL

Pee*_*bib 6 objective-c amazon-s3 amazon-web-services ios

我使用了Amazon Sample Code中的代码片段.以下代码将数据上传到amazon S3存储桶,但我需要上传文件的URL.我正朝着正确的方向前进吗?或者有人能指出我正在犯的错误

任何形式的帮助将不胜感激.

AWSS3TransferManager *transferManager = [AWSS3TransferManager defaultS3TransferManager];
    AWSS3TransferManagerUploadRequest *uploadRequest = [AWSS3TransferManagerUploadRequest new];
    uploadRequest.bucket = S3BucketName;
    uploadRequest.key = S3UploadKeyName;
    uploadRequest.body = self.uploadFileURL;
    //uploadRequest.contentLength = [NSNumber numberWithUnsignedLongLong:fileSize];

    [[transferManager upload:uploadRequest] continueWithBlock:^id(BFTask *task) {
        // Do something with the response
        AWSS3TransferManagerUploadOutput *uploadOutPut = task.result;
        NSLog(@"bftask:%@",uploadOutPut); // Upload out put gives me the following response
        return nil;
    }];
Run Code Online (Sandbox Code Playgroud)

bfTask响应:

bftask:<AWSS3TransferManagerUploadOutput: 0x1706606c0> {
    ETag = "\"0aefedfa36b687a74025b1ad50f3101f\"";
    serverSideEncryption = 0;
}
Run Code Online (Sandbox Code Playgroud)

Yos*_*uda 7

如果您只需要下载该文件,则可以使用AWSS3TransferManagerDownloadRequestSDK下载文件.或者,您可以使用AWSS3PreSignedURLBuilder生成预签名URL来下载文件.

如果您只想知道对象的URL,则URL遵循以下模式:

https://<YourS3Endpoint>/<YourBucketName>/<YourObjectKeyName>
Run Code Online (Sandbox Code Playgroud)

Amazon S3中的任何对象默认都是私有的,不可公开读取.如果你想让它公开可读,你需要设置ACL你的AWSS3TransferManagerUploadRequest对象.

有关更多详细信息,请参阅Amazon S3 Bucket公共访问注意事项.

  • 令人印象深刻的是AWS SDK的糟糕程度以及文档的糟糕程度.并且结果对象没有用,它甚至不会返回最终的URL.也许亚马逊像他们的选择员那样开发他们的开发人员,他们太忙于考虑自杀来创建有用的框架. (7认同)
  • @theLastNightTrain - 同意,它真的很生气.此外,所有文档都已过时,并且所有示例都不再相关.他们也不会弃用任何东西,他们只是删除整个类,这些类在运行pod更新时会破坏每个人的代码.我尝试使用AWS Mobile SDK的次数越多,我认为对我们开发人员实际尝试使用它的问题就是一些残酷的玩笑. (2认同)