【问题标题】:Checking metadata of Amazon S3 file using iOS AWS SDK in Swift在 Swift 中使用 iOS AWS 开发工具包检查 Amazon S3 文件的元数据
【发布时间】:2015-12-09 02:13:25
【问题描述】:

我正在使用 AWS iOS SDK v2 和 Swift 1.2。

我将我的应用程序的 app.json 文件存储在 S3 上,并希望在启动时检查它,看看它自上次运行以来是否已更新。根据研究,简单地对对象执行 HEAD 请求应该返回“Last-Modified”属性,然后可以将其与之前的属性进行比较。

问题是对对象执行 HEAD 请求似乎并没有得到很好的记录。我有以下内容:

var metaDataRequest = AWSS3HeadObjectRequest()
metaDataRequest.bucket = S3BucketName
metaDataRequest.key = S3AppJSONKey

这似乎是一个不错的开始,但是我找不到执行请求的方法。 AWSS3TransferManager 有一个download() 方法,但该方法需要AWSS3TransferManagerDownloadRequest 类型,AWSS3HeadObjectRequest 不能转换为。

不知道从哪里开始,除了在 SDK 之外执行请求。但是,我确实想尽可能多地利用 SDK,所以如果可以的话,我很想知道如何做。

【问题讨论】:

    标签: ios swift amazon-web-services amazon-s3 aws-sdk


    【解决方案1】:

    您需要使用AWSS3(而不是AWSS3TransferManager)来调用- headObject:

    【讨论】:

      【解决方案2】:

      需要调用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())
          }
      

      如果您的对象在指定日期被修改,那么它将返回对象,否则返回状态码 304。

      【讨论】:

      • 我们能得到一个 Obj-C 的例子吗?
      【解决方案3】:

      您可以使用以下 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")
              }
          }
      
      }
      

      注意:设置bucket和key的示例

      假设您有名为“ABC”的存储桶和名为“XYZ”的文件夹,而在“XYZ”内则有文件“abc123”

      比写

      headObjectsRequest.bucket = "ABC/XYZ"

      headObjectsRequest.key = "abc123"

      如果你想检查整个文件夹

      比使用

      headObjectsRequest.bucket = "ABC/XYZ"

      headObjectsRequest.key = ""

      谢谢莫辛

      【讨论】:

        猜你喜欢
        • 2016-05-23
        • 2012-06-13
        • 2017-09-06
        • 2021-12-09
        • 1970-01-01
        • 2014-11-16
        • 1970-01-01
        • 2015-06-11
        • 2020-01-30
        相关资源
        最近更新 更多