秋楓_Lance 2019-06-05 10:47 采纳率: 0%
浏览 436

Swift Alamofire调用java的图片上传http接口

1.java的http接口有两个参数,一个字符串,一个MultipartFile图片文件
接口代码如下:

@ResponseBody
@RequestMapping(value="/uploadUserImg/{userName}",method=RequestMethod.POST)
public Map<String,Object> uploadUserImg(@RequestParam("userImg") MultipartFile imgFile,@PathVariable("userName") String userName) {
}

或者
@ResponseBody
@RequestMapping(value="/uploadUserImg",method=RequestMethod.POST)
public Map<String,Object> uploadUserImg(@RequestParam("userImg") MultipartFile imgFile,@RequestParam"userName") String userName) {
}

请问怎样用Swift Alamofire编写调用方法,我在接口里打断点,下面的方法调用总是进不去接口

class FileAPI {

    static func uploadImage(userImage: Data,
                            _ reqCallBack: @escaping(Bool, JSON?, APIError?) -> Void)
    {
        let maxByte = 1024 * 1024 * 2
        if userImage.count > maxByte {
            reqCallBack(false, nil, APIError.uploadFileFail(msg: "图片大于2M,无法上传"))
            return
        }

        let url = "http://192.168.1.232:8088/httpServiceInter/uploadUserImg/admin123"
        Alamofire.upload(
            multipartFormData: { multipartFormData in
                multipartFormData.append(userImage, withName: "userImg")
        },
            to: url,
            method: .post,
            headers: ["Content-Type": "application/x-www-form-urlencoded"],
            encodingCompletion: { encodingResult in
                switch encodingResult {
                case .success(let upload, _, _):
                    upload.responseJSON { response in
                        let json = JSON(response.data!)
                        reqCallBack(true, json, nil)
                    }
                case .failure(let error):
                    reqCallBack(false, nil, APIError.unknow)
                    print(error)
                }
        }
        )
    }

错误提示:

[Request]: POST http://192.168.1.232:8088/httpServiceInter/uploadUserImg/admin123
[Response]: { URL: http://192.168.1.232:8088/httpServiceInter/uploadUserImg/admin123 } { Status Code: 400, Headers {
Connection = (
close
);
"Content-Language" = (
en
);
"Content-Length" = (
1123
);
"Content-Type" = (
"text/html;charset=utf-8"
);
Date = (
"Tue, 04 Jun 2019 05:34:50 GMT"
);
Server = (
"Apache-Coyote/1.1"
);
} }
[Data]: 1123 bytes
[Result]: FAILURE: responseSerializationFailed(reason: Alamofire.AFError.ResponseSerializationFailureReason.jsonSerializationFailed(error: Error Domain=NSCocoaErrorDomain Code=3840 "Invalid value around character 0." UserInfo={NSDebugDescription=Invalid value around character 0.}))
[Timeline]: Timeline: { "Request Start Time": 581319290.237, "Initial Response Time": 581319290.455, "Request Completed Time": 581319290.524, "Serialization Completed Time": 581319290.547, "Latency": 0.218 secs, "Request Duration": 0.287 secs, "Serialization Duration": 0.023 secs, "Total Duration": 0.310 secs }
(lldb)

  • 写回答

1条回答 默认 最新

  • 你知我知皆知 2024-08-10 02:55
    关注

    以下回答参考 皆我百晓生券券喵儿 等免费微信小程序相关内容作答,并由本人整理回复。

    在Swift中,我们可以使用Alamofire库来发送HTTP请求。以下是一个示例,它将你的Java HTTP接口转换为Swift中的HTTP POST请求。

    首先,你需要安装Alamofire库。你可以通过运行以下命令来安装:

    pod 'Alamofire'
    

    然后,你可以在你的Swift文件中导入Alamofire并创建一个新的URLSession对象:

    import Alamofire
    
    let session = URLSession.shared
    

    接下来,你可以创建一个新的UploadTask实例,并设置它的目标URL、请求类型和回调函数:

    let task = session.uploadTask(with: data, from: path, to: URL(string: "http://your-api-url.com")!, method: .post, encodingCompletion: { encodingResult in
        switch encodingResult {
        case .success(let upload, _, _):
            upload.responseJSON { response in
                // Handle the response here
            }
        case .failure(let error):
            // Handle errors here
        }
    })
    

    在这个例子中,我们设置了目标URL(这里是"http://your-api-url.com"),请求类型为POST,以及我们的回调函数。当你想要处理响应时,可以在这里添加逻辑。

    注意:你需要替换"http://your-api-url.com"为你实际的API URL。

    最后,记得在你的应用中启动这个任务:

    task.resume()
    

    这应该会触发你的HTTP请求。如果你遇到任何问题,请检查你的网络配置和API URL。

    评论

报告相同问题?