Swift AWS S3上传示例

Swift AWS S3上传示例

本文介绍了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中查看,可以确认文件已经正确上传了