在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()方法,但该方法需要一个AWSS3TransferManagerDownloadRequesttypes,其中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