背景
我想使用Alamofire Lib将base64字符串从iOS应用发送到弹簧靴后端。
问题
由于此错误而失败:
2017-08-31 10:22:49.547259+0200 Epic[851:367066] []
nw_endpoint_flow_prepare_output_frames [6.1 46.30.215.94:80 ready
socket-flow (satisfied)] Failed to use 1 frames, marking as failed
2017-08-31 10:22:49.549173+0200 Epic[851:367066] []
nw_endpoint_handler_add_write_request [6.1 46.30.215.94:80 failed
socket-flow (satisfied)] cannot accept write requests
2017-08-31 10:22:49.552773+0200 Epic[851:367069] []
tcp_connection_write_eof_block_invoke Write close callback received
error: [22] Invalid argument
当我将端点从本地开发环境更改为Heroko时,就会发生这个问题。(http://heroku.com)。
我可以在没有问题的情况下发送较小的图像(100x100),但不能(600x600)。
我尝试过:
- 添加HTTP标头"内容长度"和JSON主体的长度。
- 从发送JSON主体转换为URL参数。
有什么建议吗?我可以配置Heroku Spring引导以接受更大的HTTP数据请求,还是在应用程序中需要进行的设置?
我的代码:
func createImage(_ image: UIImage, success: @escaping (String)->(), failed: @escaping (Void)->(Void)){
let base64 = image.getImageAsBase64()
Alamofire.request(self.url, method: .put, parameters: ["image" : base64], headers: self.headers)
.responseString(completionHandler: {response in
switch(response.result) {
case .success(let response):
success(response)
break;
case .failure(let error):
print(error)
failed()
break;
}
})
}
也有相同的问题。这是因为Alamofire的字符数量有限。您需要使用alamofire.upload进行图像或大数据。请参阅https://github.com/alamofire/alamofire#uploading-data-to-a-server。