在Swift中使用iOS AWS SDK检查Amazon S3文件的元数据
我正在使用AWS iOS SDK v2和Swift 1.2。
我在S3上存储我的应用程序的app.json
文件,并希望在启动时检查它是否自上次运行后更新。 根据研究,只要对对象执行HEAD请求应该返回“Last-Modified”属性,然后可以将其与之前的对比。
问题是在一个对象上执行一个HEAD请求似乎没有很好的logging。 我有以下几点:
var metaDataRequest = AWSS3HeadObjectRequest() metaDataRequest.bucket = S3BucketName metaDataRequest.key = S3AppJSONKey
这似乎是一个体面的开始,但我找不到执行请求的方法。 AWSS3TransferManager
有一个download()
方法,但该方法需要一个AWSS3TransferManagerDownloadRequest
types,其中AWSS3HeadObjectRequest
不能被转换为。
不知道从哪里走,只是在SDK之外做请求。 但是,我确实想要尽可能多地利用SDK,所以如果可能的话,我很想知道如何。
您需要使用AWSS3
(而不是AWSS3TransferManager
)来调用- headObject:
你需要调用AWSS3的headobject方法
var request = AWSS3HeadObjectRequest() request.bucket = "flkasdhflhad" request.key = "hfsdahfjkhadjkshf" request.ifModifiedSince = NSDate() var s3 = AWSS3.defaultS3() s3.headObject(request) { ( output1 : AWSS3HeadObjectOutput?, error : NSError?) -> Void in print( output1?.description()) }
如果你的对象从指定的date被修改,那么它将返回对象,否则它将返回状态码304。
你可以使用下面的Swift 2.2方法来检查文件是否存在
func checkIfFileExist() { let s3 = AWSS3.defaultS3() let headObjectsRequest = AWSS3HeadObjectRequest() headObjectsRequest.bucket = "YourBucketName" //Don't add "/" at end of your bucket Name headObjectsRequest.key = "YourFileNameYouWantToCheckFor" //Don't add "/" in start of file name s3.headObject(headObjectsRequest).continueWithBlock { (task) -> AnyObject! in if let error = task.error { print("Error to find file: \(error)") } else { print("fileExist") } } }
注意:设置存储区和密钥的示例
假设你有一个名为“ABC”的桶,而不是名为“XYZ”的文件夹,而在“XYZ”里面你有文件“abc123”
比写
headObjectsRequest.bucket =“ABC / XYZ”
和
headObjectsRequest.key =“abc123”
如果你想检查整个文件夹
比使用
headObjectsRequest.bucket =“ABC / XYZ”
和
headObjectsRequest.key =“”
谢谢Mohsin