
本文介绍了iOS下进行S3上传的示范程序,使用Swift语言。
创建一个Xcode项目S3Uploader。
在S3Uploader.xcodeproj同一目录下创建一个文本文件pods。加入以下内容:
source 'https://github.com/CocoaPods/Specs.git'
pod 'AWSCore'
pod 'AWSS3'
在命令行终端,运行:
pod install
打开S3Uploader.xcworkspace就可以用了。
首先需要为Swift创建一个头文件aws_objective_bridging.h。并在Settings中设置。
在头文件中:
#import
#import
创建一个存储桶
选中刚创建的存储桶,设置权限,添加存储桶策略:
{
"Statement": [
{
"Action": [
"s3:AbortMultipartUpload",
"s3:DeleteObject",
"s3:GetObject",
"s3:PutObject"
],
"Effect": "Allow",
"Resource": "arn:aws:s3:::xxxxxxx/*",
"Principal": "*"
}
]
}
注意:替换为自己的存储桶名
创建Cognito账户
在Storyboard中加入一个按钮
连接到代码中
在 func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
中加入下列代码:
let credentialsProvider = AWSCognitoCredentialsProvider(regionType: AWSRegionType.USEast1, identityPoolId: "us-east-1:xxxxxxxxxxx") // 用自己的Id替代
let configuration = AWSServiceConfiguration(region: AWSRegionType.USEast1, credentialsProvider: credentialsProvider)
AWSServiceManager.defaultServiceManager().defaultServiceConfiguration = configuration
上传:(首先把一个名为test.jpg的文件加到xcode项目中)
let transferManager = AWSS3TransferManager.defaultS3TransferManager()
if let uploadRequest = AWSS3TransferManagerUploadRequest() {
uploadRequest.bucket = "xxxxxx" // 替换为存储桶名
uploadRequest.key = "test.jpg"
uploadRequest.body = NSURL(fileURLWithPath: NSBundle.mainBundle().resourcePath! + "/test.jpg")
transferManager.upload(uploadRequest).continueWithBlock { (task) -> AnyObject! in
if let error = task.error {
if error.domain == AWSS3TransferManagerErrorDomain as String {
if let errorCode = AWSS3TransferManagerErrorType(rawValue: error.code) {
switch (errorCode) {
case .Cancelled, .Paused:
dispatch_async(dispatch_get_main_queue(), { () -> Void in
println("cancelled or paused")
})
break;
default:
println("upload() failed: [\(error)]")
break;
}
} else {
println("upload() failed: [\(error)]")
}
} else {
println("upload() failed: [\(error)]")
}
}
if let exception = task.exception {
println("upload() failed: [\(exception)]")
}
if task.result != nil {
dispatch_async(dispatch_get_main_queue(), { () -> Void in
println("upload successfully")
})
}
return nil
}
最后去s3中查看,可以确认文件已经正确上传了
