我已经编写了一个iOS共享扩展程序,它使用下面的代码获取图像并通过POST请求将其上传到给定的URL。我在扩展程序退出后使用Alamofire在后台创建上传请求。
当我在模拟器上执行此操作时,一切正常,我可以看到requestb.in收到的图像数据。但是当我在设备上运行时,requestb.in根本没有显示任何内容。我在自己的服务器上指出了URL,我在nginx access.log
中看到了一个HTTP 408响应 - 但是只有在从设备运行时才会看到。从模拟器发布工作正常。
我原本没有在Alamofire.upload
的调用中指定阈值,但是我阅读了上面那个方法的文档并且认为值得尝试降低它以便文件不会从内存中流式传输,但它没有效果。
设备与模拟器的不同之处是什么?
guard let imageData = NSData.init(contentsOf: url) as Data? else { return }
Alamofire.upload(multipartFormData: { (multipartFormData) in
multipartFormData.append(imageData, withName: "image")
}, usingThreshold: 100_000,
to: "https://requestb.in/1egcmqq1?inspect",
method: HTTPMethod.post,
headers: nil) { (encodingResult) in
switch encodingResult {
case .success(let upload, _, _):
upload.responseJSON { response in
debugPrint(response)
}
case .failure(let encodingError):
print(encodingError)
}
}
编辑:感谢@Yepher的评论。我首先将数据更改为只是一个字符串,它工作,然后是一个非常小的图像,这也工作。所以问题似乎与文件的大小有关。我想我可能没有做与阈值参数有关的事情...