AmazonS3RequestManager-JettF 1.4.0

AmazonS3RequestManager-JettF 1.4.0

测试测试
语言语言 SwiftSwift
许可证 MIT
发布日期上次发布日期2018年10月
SPM支持SPM

Jett Farmer维护。



 
依赖关系
Alamofire~> 4.7
SWXMLHash~> 4.2
 

AmazonS3RequestManager

Version
License
Platform
Build Status
Contact me on Codementor

Alamofire基于的请求管理器,将请求数据序列化到AWS S3(Amazon简单存储解决方案)。

AmazonS3RequestManager还包含一个请求序列器,用于创建任何其他网络方法使用的URLRequest对象。

特性

  • 请求序列化
  • 响应验证
  • Amazon S3响应错误解析
  • 访问控制列表(ACL)管理
  • 支持Amazon S3子资源
  • 支持Amazon S3存储类
  • 全面单元测试覆盖
  • 完整文档

安装

CocoaPods

CocoaPods是Cocoa项目的依赖管理器。

要使用CocoaPods将AmazonS3RequestManager集成到您的Xcode项目中,请在您的Podfile中指定它

source 'https://github.com/CocoaPods/Specs.git'
platform :ios, '8.0'
use_frameworks!

// For Swift 2.0
pod 'AmazonS3RequestManager', '~> 0.10'

然后,运行以下命令

$ pod install

用法

首先创建管理器的一个实例。

let amazonS3Manager = AmazonS3RequestManager(bucket: myAmazonS3Bucket,
    region: .USStandard,
    accessKey: myAmazonS3AccessKey,
    secret: myAmazonS3Secret)

列出存储桶对象

获取存储桶中对象列表

amazonS3Manager.listBucketObjects().responseS3Object { (response: DataResponse<S3BucketObjectList, NSError>) in
    if let files = response.result.value?.files {
        for file in files {
            print(file.path)
        }
    }
}

获取对象

将对象作为响应对象获取

amazonS3Manager.get(at: "myFolder/fileName.jpg")

将对象保存到文件

let destinationURL: URL = FileManager.defaultManager().URLsForDirectory(.DocumentDirectory, inDomains: .UserDomainMask)[0]
let destination: DownloadRequest.DownloadFileDestination = { _, _ in destinationURL, []) }
amazonS3Manager.download(at: "myFolder/fileName.jpg", to: destination)

获取元数据

检索对象的元数据而无需返回该对象本身

amazonS3Manager.getMetaData(forObjectAt: "fileName.txt").responseS3MetaData { (response: DataResponse<S3ObjectMetaData, NSError>) in
    if let metaData = response.result.value?.metaData {
        for objectMetaData in metaData {
            print(objectMetaData)
        }
    }
}

上传对象

let fileURL: NSURL = NSURL(fileURLWithPath: "pathToMyObject")
amazonS3Manager.upload(from: fileURL, to: "pathToSaveObjectTo/fileName.jpg")

复制对象

amazonS3Manager.copy(from: "demo.txt", to: "copy.txt").response { request, response, data, error in    
    print(response)    
    print(error)
}

删除对象

amazonS3Manager.delete(at: "myFolder/fileName.jpg")

响应序列化

AmazonS3RequestManager包含一个自定义数据响应序列器,用于解析Amazon S3服务中的错误。

amazonS3Manager.getObject("myFolder/fileName.jpg")
  .responseS3Data { (response) -> Void in
    // Handle Response Data or Error
}

访问控制列表(ACL)

AmazonS3RequestManager提供简单的方法API以获取和设置存储桶和对象的ACL。

获取ACL

您可以使用GET请求检索在请求管理器上设置的当前存储桶的ACL

amazonS3Manager.getBucketACL()

或者对于存储桶中的对象,使用GET请求

amazonS3Manager.getACL(forObjectAt: "myFolder/fileName.jpg")

设置ACL

您可以使用PUT请求在当前存储桶上设置ACL

amazonS3Manager.setBucketACL(AmazonS3PredefinedACL.Public)

或者在存储桶中的对象上通过PUT请求设置它

amazonS3Manager.setACL(acl: PredefinedACL.publicReadWrite, forObjectAt: "myFolder/fileName.jpg")

在上传对象时也可以使用可选项的acl参数来设置对象的ACL。

创建自定义ACL

如果Amazon S3服务提供的预定义ACL不足以控制,您可以使用AmazonS3ACLPermissionGrantAmazonS3CustomACL创建自定义ACL

AmazonS3ACLPermissionGrant授予多个用户/用户组单个权限。
AmazonS3CustomACL由多个AmazonS3ACLPermissionGrant组成,以创建您想创建的任何系列的权限。

示例

授予所有用户对存储桶的读取访问权限

let readPermission = AmazonS3ACLPermissionGrant(permission: .Read, grantee: .AllUsers)
amazonS3Manager.setBucketACL(readPermission)

授予所有用户对存储桶的读取访问权限,认证用户对存储桶的写入访问权限,以及两个具有特定电子邮件地址和特定用户ID的用户完全控制

let readPermission = AmazonS3ACLPermissionGrant(permission: .Read, grantee: .AllUsers)
let writePermission = AmazonS3ACLPermissionGrant(permission: .Write, grantee: .AuthenticatedUsers)
let fullControlPermission = AmazonS3ACLPermissionGrant(permission: .FullControl, grantees: [.EmailAddress("[email protected]"), .UserID("my-user-id")])
let customACL = AmazonS3CustomACL(grants: [readPermission, writePermission, fullControlPermission])
amazonS3Manager.setBucketACL(customACL)

1.0.0迁移

版本 1.0.0 对公共类和函数的名称进行了修改,采用 Swift API 设计指南中推荐的语言语法。此外,语言版本也更新为使用 Swift 3.0。

  • 从一些对象、类和枚举中移除了 AmazonS3 前缀。
  • ACL 协议方法参数名称从 setACLHeaders(forRequest:) 变更为 'setACLHeaders(on:)`。
  • PredefinedACL 情况名称变更
    • Private 变更为 privateReadWrite
    • Public 变更为 publicReadWrite
  • AmazonS3RequestManager 上更改了请求方法名。
    • getObject(path:) 变更至 get(at:)
    • downloadObject(path:saveToURL:) 变更至 download(at:to:)
    • putObject(fileURL:destinationPath:acl:metaData:storageClass:) 变更至 upload(from:to:acl:metaData:storageClass:)
    • putObject(data:destinationPath:acl:metaData:storageClass:) 变更至 upload(_:to:acl:metaData:storageClass:)
    • headObject(path:) 变更至 getMetaData(forObjectAt:)
    • copyObject(_:destinationPath:) 变更至 copy(from:to:)
    • deleteObject(_:) 变更至 delete(at:)
    • getACL(forObjectAtPath:) 变更至 getACL(forObjectAt:)
    • setACL(forObjectAtPath:acl:) 变更至 setACL(_:forObjectAt:)
  • Alamofire 现在使用 DownloadFileDestination 来配置下载请求的路径。您需要将所有下载请求迁移至此,而不仅仅是 destinations。