我想通过 alamofire 提出这样的请求,并附上选定的文件:
我还必须向请求添加拦截器。因此,我将以下代码添加到我的图像选择器方法中:
let manager = Session(configuration: URLSessionConfiguration.default, interceptor: CallInterceptor.init(method:HTTPMethod.post))
manager.upload(multipartFormData: { multipartFormData in
multipartFormData.append( fileUrl, withName: "upload_doc\"; filename= \"\(fileName)\"")
},
to:Pathes.init(endpoint: "user/photo").resourseUrl.absoluteString).responseJSON(completionHandler: { (completion) in
print(completion.debugDescription)
})
哪里:
let fileName = fileUrl.lastPathComponent
在日志中我看到了这样的输出:
[Request]: POST url
[Headers]:
Authorization: Bearer token
Content-Type: multipart/form-data; boundary=alamofire.boundary.c5da18c6b053a9d7
[Body]: None
[Response]: None
[Network Duration]: None
[Serialization Duration]: 3.253298928029835e-05s
[Result]: failure(Alamofire.AFError.sessionDeinitialized)
如我所见,我没有附加请求正文是什么导致此类请求取消。如何将正文添加到请求中?我认为这一行:
multipartFormData.append( fileUrl, withName: "upload_doc\"; filename= \"\(fileName)\"")
但它不会向请求添加正文。我也试过直接添加文件:
multipartFormData.append(imgData, withName: "upload_doc\"; filename= \"\(fileName)\"",fileName: fileName, mimeType: "image/jpg")
但这种方式也发送:
[Body]: None
所以问题是如何向多部分请求添加一些正文,或者我必须以另一种方式发送文件?
答案 0 :(得分:2)
错误 .sessionDeinitialized
表示您的 Session
实例在请求完成之前被deinit
处理。您需要让它保持活动状态,无论是作为其他东西的实例值,还是作为单例。