0

我试图通过 Alamofire 5 多部分数据上传单个图像,API 在 Postman 和 android 端都可以正常工作,但在 iOS 端不能正常工作。API 是在 Python 烧瓶中开发的。图像是从相机拍摄的,并使用 JPEGCompression 上传图像。

以下是我的代码:

func postMultipartData(imageData: Data, completion:@escaping (Result<AccuracyModel?, ErrorResponse>) -> Void) {
        let url = APIConstant.ImageAccuracyBaseUrl.BASEURL
        let mimeType = "image/jpeg"
        
        let headers: HTTPHeaders = [
               "Content-Type": ContentType.multipart.rawValue
        ]
        
        AF.upload(multipartFormData: { (multipartFormData) in
            
            multipartFormData.append(imageData, withName: "file", fileName: "file123.jpg", mimeType: mimeType)
            print(multipartFormData.boundary)
        }, to: url, usingThreshold: UInt64.init(),
           method: .post,
           headers: headers).response { response in
            switch response.result {
            case .success(_):
                if response.response?.statusCode == 200 || response.response?.statusCode == 201 {
                    do {
                        
                        if let data = response.data {
                            
                            let json = try JSONSerialization.jsonObject(with: data, options: []) as? [String: Any]
                            print(json ?? "")
                            
                            let decodedData = try! JSONDecoder().decode(AccuracyModel.self, from: data)
                            
                            DispatchQueue.main.async {
                                completion(.success(decodedData))
                            }
                        } else {
                            print(response)
                        }
                    } catch {
                        completion(Result.failure(self.generateErroModel()!))
                    }
                } else if response.response?.statusCode == 500 {
                    completion(Result.failure(self.generateErroModel()!))
                } else {
                    fallthrough
                }
                
                break
            case .failure(_):
                completion(Result.failure(self.generateErroModel()!))
            }
        }
    }

出于测试目的,api 正在使用 5000 端口,这可能是问题吗?不需要参数,所以不发送任何参数。

我也尝试过使用 NSURLSession,但没有运气。

对于 Flask 代码,我参考了以下链接: https ://pytorch.org/tutorials/intermediate/flask_rest_api_tutorial.html

提前致谢。

4

0 回答 0