当文件不存在时,AWS S3 HEAD请求不返回404

时间:2016-12-17 10:21:57

标签: ios objective-c swift amazon-web-services amazon-s3

我使用以下代码检查S3上是否存在文件。不幸的是,我永远不会收到错误。似乎AWS SDK应该返回一个错误,但它没有,因为正文是空的,并且无法在S3错误中反序列化。

如何解决此问题?一个解决方案是检查自己在回复中的404,但我找不到使用task的方法。

s3.headObject(headRequest).continue({ task in
            task.
            if let taskError = task.error {
                if let error = task.error as NSError? {
                    if error.domain == AWSS3ErrorDomain && AWSS3ErrorType(rawValue: error.code) == AWSS3ErrorType.noSuchKey {
                        return successBlock(false)
                    }
                }
                errorBlock(taskError)
                return nil
            }
            return successBlock(true)
        });

(如果错误是403,则会出现同样的问题)

1 个答案:

答案 0 :(得分:-1)

这里的问题是你永远不会收到一个Body,因为HEAD请求的目的不是返回一个。

RFC7230 - Section 3.3

对HEAD请求方法的回应(第4.3.2节    [RFC7231])从不包含消息体,因为关联    响应头字段(例如,传输编码,内容长度,    等),如果存在,只表明他们的价值是什么    请求方法是GET([RFC7231]第4.3.1节)。

但是,您仍然可以获取HTTP状态代码,该代码应指示发生的任何错误的状态。