更新到iOS 11.1后,Alamofire 4.5.1失败

时间:2017-11-07 11:43:39

标签: download alamofire swift4

更新到iOS 11.1后,.sqlite下载失败。我已经确认我有最新的Alamofire库(4.5.1),我已经卸载并重新安装使用pod。我已经清理了项目并试图调试它,但我找不到问题,只是我注意到temporaryURL是零。

我的代码:

        let parameters: Parameters = [:]

        var filePath: URL?

        let destination: (URL, HTTPURLResponse) -> (URL, DownloadRequest.DownloadOptions) = {
            (temporaryURL, response) in

            if let directoryURL = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first, let suggestedFilename = response.suggestedFilename {
                filePath = directoryURL.appendingPathComponent("\(suggestedFilename)")
                return (filePath!, [.removePreviousFile, .createIntermediateDirectories])
            }
            return (temporaryURL, [.removePreviousFile, .createIntermediateDirectories])
        }

        Alamofire.download("https://s3-eu-west-1.amazonaws.com/xxx/xxx/xxx.sqlite3", method: .get, parameters: parameters, encoding: JSONEncoding.default, to: destination)
            .downloadProgress { progress in
                DispatchQueue.main.async
                {
                    /.../                        
                }
            }
            .validate { request, response, temporaryURL, destinationURL in
                /.../
                return .success
            }
            .response { response in

                debugPrint(response)
                print("Descarga finalizada");
                /.../
            }

.downloadProgress工作正常。但当它达到100%时,该过程不会继续,并且由于等待时间耗尽而等待它结束(-1001)

带调试的控制台输出:

2017-11-07 12:04:28.422333+0100 Target[673:215766] Task <26F62B6A-FEB4-4908-92C9-D3F9C9886C81>.<4> finished with error - code: -1001

Alamofire.DefaultDownloadResponse(request: Optional(https://s3-eu-west-1.amazonaws.com/xxx/xxx/xxx.sqlite3), response: Optional(<NSHTTPURLResponse: 0x1c0235220> { URL: https://s3-eu-west-1.amazonaws.com/xxx/xxx/xxx.sqlite3 } { Status Code: 200, Headers {
    "Accept-Ranges" =     (
        bytes
    );
    "Content-Length" =     (
        28086272
    );
    "Content-Type" =     (
        "application/octet-stream"
    );
    Date =     (
        "Tue, 07 Nov 2017 11:02:52 GMT"
    );
    Etag =     (
        "\"xxxxxxxxxxxxxxxxx\""
    );
    "Last-Modified" =     (
        "Tue, 07 Nov 2017 01:44:00 GMT"
    );
    Server =     (
        AmazonS3
    );
    "x-amz-id-12" =     (
        "LiCdsdasdasfsdfdsffgsfdsw3o+npOhfUVLdZ/KlTWgLXdPNPU8iYnZIkeGoRvBkLbKwFFY="
    );
    "x-amz-request-id" =     (
        9CD8D133234DB
    );
} }), temporaryURL: nil, destinationURL: nil, resumeData: Optional(7043 bytes), error: Optional(Error Domain=NSURLErrorDomain Code=-1001 "Se ha agotado el tiempo de espera." UserInfo={_kCFStreamErrorCodeKey=-2102, NSURLSessionDownloadTaskResumeData=<CFData 0x1c0649390 [0x1b1491310]>{length = 7043, capacity = 16384, bytes = 0x3c3f786d6c2076657273696f6e3d2231 ... 2f706c6973743e0a}, NSUnderlyingError=0x1c0649e10 {Error Domain=kCFErrorDomainCFNetwork Code=-1001 "(null)" UserInfo={_kCFStreamErrorCodeKey=-2102, _kCFStreamErrorDomainKey=4}}, NSLocalizedDescription=Se ha agotado el tiempo de espera., NSErrorFailingURLStringKey=https://s3-eu-west-1.amazonaws.com/xxx/xxx/xxx.sqlite3, NSErrorFailingURLKey=https://s3-eu-west-1.amazonaws.com/xxx/xxx/xxx.sqlite3, _kCFStreamErrorDomainKey=4}), timeline: Timeline: { "Request Start Time": 531745370.759, "Initial Response Time": 531745371.441, "Request Completed Time": 531745468.447, "Serialization Completed Time": 531745468.450, "Latency": 0.682 secs, "Request Duration": 97.688 secs, "Serialization Duration": 0.003 secs, "Total Duration": 97.691 secs }, _metrics: Optional((Task Interval) <_NSConcreteDateInterval: 0x1c003f5c0> (Start Date) 2017-11-07 11:02:50 +0000 + (Duration) 97.667806 seconds = (End Date) 2017-11-07 11:04:28 +0000
(Redirect Count) 0
(Transaction Metrics) (Request) <NSURLRequest: 0x1c00019d0> { URL: https://s3-eu-west-1.amazonaws.com/xxx/xxx/xxx.sqlite3, Method GET, Headers {
    Accept =     (
        "*/*"
    );
    "Accept-Encoding" =     (
        "gzip;q=1.0, compress;q=0.5"
    );
    "Accept-Language" =     (
        "es-ES;q=1.0, fr-ES;q=0.9, en-ES;q=0.8"
    );
    Connection =     (
        "keep-alive"
    );
    "Content-Type" =     (
        "application/json"
    );
    Host =     (
        "s3-eu-west-1.amazonaws.com"
    );
    "User-Agent" =     (
        "Targer/1.7 (com.xxxxx.xxxxx; build:156; iOS 11.1.0) Alamofire/4.5.1"
    );
} }
(Response) <NSHTTPURLResponse: 0x1c0030ae0> { URL: https://s3-eu-west-1.amazonaws.com/xxx/xxx/xxx.sqlite3 } { Status Code: 200, Headers {
    "Accept-Ranges" =     (
        bytes
    );
    "Content-Length" =     (
        28086272
    );
    "Content-Type" =     (
        "application/octet-stream"
    );
    Date =     (
        "Tue, 07 Nov 2017 11:02:52 GMT"
    );
    Etag =     (
        "\"6c9de7be53a1cdfser61ca7fa1a4\""
    );
    "Last-Modified" =     (
        "Tue, 07 Nov 2017 01:44:00 GMT"
    );
    Server =     (
        AmazonS3
    );
    "x-amz-id-2" =     (
        "LiCk24ajVvge+qcds5hgfbgdfxgnhFOhfUVLdZ/KlTWgLXdPNPU8iYnZIkeGoRvBkLbKwFFY="
    );
    "x-amz-request-id" =     (
        9CD8SDHD7B81DB
    );
} }
(Fetch Start) 2017-11-07 11:02:50 +0000
(Domain Lookup Start) 2017-11-07 11:02:50 +0000
(Domain Lookup End) 2017-11-07 11:02:50 +0000
(Connect Start) 2017-11-07 11:02:50 +0000
(Secure Connection Start) 2017-11-07 11:02:50 +0000
(Secure Connection End) 2017-11-07 11:02:51 +0000
(Connect End) 2017-11-07 11:02:51 +0000
(Request Start) 2017-11-07 11:02:51 +0000
(Request End) 2017-11-07 11:02:51 +0000
(Response Start) 2017-11-07 11:02:51 +0000
(Response End) 2017-11-07 11:03:27 +0000
(Protocol Name) http/1.1
(Proxy Connection) NO
(Reused Connection) NO
(Fetch Type) Network Load

))

Descarga finalizada

但是,该文件已下载到路径:

App content Folder

我使用更简单的版本更改了文件的目标位置:

let destination = DownloadRequest.suggestedDownloadDestination(for: .documentDirectory)

但问题是一样的。

iOS 10.3完美运行。

我感谢任何帮助,谢谢。

1 个答案:

答案 0 :(得分:0)

我已通过删除其他参数解决了这个问题:

Alamofire.download("https://s3-eu-west-1.amazonaws.com/xxx/xxx/xxx.sqlite3", method: .get, parameters: parameters, encoding: JSONEncoding.default, to: destination)

要:

Alamofire.download("https://s3-eu-west-1.amazonaws.com/xxx/xxx/xxx.sqlite3",  to: destination)

我不确定什么是错的,但这就是它的工作原理