Alamofire 4.5.1上传MultipartFormData响应处理

时间:2017-10-16 14:38:16

标签: xcode swift3 alamofire multipartform-data xcode9

我正在使用Xcode版本9.0,Swift 3.2。我想将zip文件上传到指定的URL并在服务器端进程完成后获得响应。

我可以发送请求和上传文件。不幸的是,我无法应对。我遇到了下面列出的各种情况。

试验#1

        Alamofire.upload(
        multipartFormData: { multipartFormData in
            multipartFormData.append(fileURL, withName: "encrypted_images")
    },
        to: "http://" + self.se.getIpAndPort() + "/enroll",
        encodingCompletion: { encodingResult in
            switch encodingResult {
            case .success(let upload, _, _):
                upload
                    .responseJSON(completionHandler: { (result) in
                        print("Start of responseJSON")
                        print(result)

                        do {
                            let readableJSON = try JSONSerialization.jsonObject(with: result.data!, options:.allowFragments) as! [String: Any]
                            let rStatus = readableJSON["status"] as! String
                            if rStatus == "Done" {
                                print("Status:Done")
                                self.endOfUploadRunFunctions(errorFlag: false)
                            }
                        }catch{
                            print("Status:Error")
                            self.endOfUploadRunFunctions(errorFlag: true)
                        }
                        print("End of responseJSON!")

                    })

            case .failure(let encodingError):
                print("Failure")
                print(encodingResult)
                if encodingError._code == NSURLErrorTimedOut {
                    print("Timeout error!")
                }
                print(encodingError)
                self.endOfUploadRunFunctions(errorFlag: true)
            }
    }
    )

输出#1

2017-10-16 16:55:36.558671+0300 MyApp Data[5500:1367406] Task <6A1894B9-7185-4B39-AD68-480548A1DAA3>.<1> finished with error - code: -1001
Start of responseJSON
FAILURE: Error Domain=NSURLErrorDomain Code=-1001 "The request timed out." UserInfo={NSUnderlyingError=0x1c044dd10 {Error Domain=kCFErrorDomainCFNetwork Code=-1001 "(null)" UserInfo={_kCFStreamErrorCodeKey=-2102, _kCFStreamErrorDomainKey=4}}, NSErrorFailingURLStringKey=http://192.168.115.1:9090/enroll, NSErrorFailingURLKey=http://192.168.115.1:9090/enroll, _kCFStreamErrorDomainKey=4, _kCFStreamErrorCodeKey=-2102, NSLocalizedDescription=The request timed out.}
Status:Error
End of responseJSON!

ServerSide#1

继续处理。从服务器到应用程序的响应还没有返回。

试验#2

我创建了另一个类来改变超时。它只是一个包装类,用于设置等待响应的时间间隔。

import Foundation
import Alamofire

class NetworkManager {

    var manager: SessionManager

    init() {
        let configuration = URLSessionConfiguration.default
        configuration.timeoutIntervalForRequest = 200
        configuration.timeoutIntervalForResource = 200 // seconds
        manager = Alamofire.SessionManager(configuration: configuration)
    }
}

刚改变了我调用上传功能的方式。我在类中启动了对象,并使用该SessionManager对象来调用Alamofire的上传方法。

self.networkOperator.manager.upload(
            multipartFormData: { multipartFor...

输出#2

2017-10-16 17:25:44.832541+0300 MyApp Data[5529:1377171] Task <448D0EF9-00D6-4E86-BD40-6E4A612892B5>.<1> finished with error - code: -1001
Start of responseJSON
FAILURE: Error Domain=NSURLErrorDomain Code=-1001 "The request timed out." UserInfo={NSErrorFailingURLStringKey=http://192.168.115.1:9090/enroll, NSErrorFailingURLKey=http://192.168.115.1:9090/enroll, _kCFStreamErrorDomainKey=4, _kCFStreamErrorCodeKey=-2103, NSLocalizedDescription=The request timed out.}
Status:Error
End of responseJSON!

ServerSide#2

在输出打印到Xcode控制台之前已完成处理。服务器已使用JSON格式的答案返回HTTP 200和状态为Done。

我尝试将超时间隔更改为600并且它给出了相同的结果。服务器说&#34;好的&#34;,但应用说&#34;超时错误&#34;。

我还做过另一项测试来了解系统是否工作。我忽略了服务器端的进程,只是返回了Done。它完美地运作。但是我必须在服务器中做一些工作,所以app应该等待响应。

我还测试了Alamofire-Synchronous。是的,它也不起作用。

我缺少什么?我已经看到有关Alamofire的一些主题是异步的,它不是线程安全的。那么我该怎么做来处理这种情况呢?

由于

0 个答案:

没有答案