【问题标题】:Uploading image with parameters (alamofire)上传带参数的图像(alamofire)
【发布时间】:2023-03-22 14:06:01
【问题描述】:

我正在尝试使用 AlamoFire 将图像 (avatarImage) 作为 formData 参数类型上传到服务器,但每次尝试时都会生成“无法读取数据,因为它的格式不正确”错误发布。我不太确定我做错了什么。

class func createTeamWithAvatar(avatarImage: Image) {
    let extendedURI = "\(RequestManager.baseURL)" + "\(RequestManager.ClickUpURI.Team.rawValue)"
    RequestManager.sharedAlamofireManager.upload(multipartFormData: {
        multipartFormData in

        //This generates an error: "The data could not be read because it isn’t in the correct format"
        if let imageData = UIImageJPEGRepresentation(avatarImage, 1) {
            multipartFormData.append(imageData, withName: "avatar", mimeType: "image/jpeg")
        }

        }, to: extendedURI,
            encodingCompletion: { encodingResult in
                switch encodingResult {
                case .success(let upload, _, _):
                    upload.responseJSON {
                        response in

                        if let statusCode = response.response?.statusCode,
                            let response = response.result.value as? Dictionary<String, AnyObject>,
                            let _ = response["id"] as? String
                            , statusCode == 200
                        {
                            completionHandler(response, nil)
                        } else {
                            let responseError = response.result.value as? Dictionary<String, AnyObject>

                            let errorInfo = responseError ?? ["err" : "Unexpected media uploading error" as AnyObject]
enter code here
                            let error = response.result.error ?? RequestManager.makeError(response.response?.statusCode ?? 500, userInfo: errorInfo)
                            completionHandler(nil, error as NSError?)
                        }
                    }
                default:
                    completionHandler(nil, RequestManager.makeError(500, userInfo: ["err" : "Multipart encoding failed" as AnyObject]))
                }
        })
    }

PS:我正在使用 multipartFormData 上传 b/c 我还需要发送一些其他参数(一旦我能够上传图片)。

【问题讨论】:

    标签: ios image alamofire


    【解决方案1】:

    你应该使用

    multipartFormData.append(paramData, withName: "paramName")
    

    如果是字符串参数,您应该将字符串转换为数据

    data = string.data(using: String.Encoding.utf8)!
    multipartFormData.append(data, withName: "stringParamName")
    

    完整代码

       RequestManager.sharedAlamofireManager.upload(multipartFormData: {
        multipartFormData in
    
        //This generates an error: "The data could not be read because it isn’t in the correct format"
        if let imageData = UIImageJPEGRepresentation(avatarImage, 1) {
            multipartFormData.append(imageData, withName: "avatar", mimeType: "image/jpeg")
        }
        data = string.data(using: String.Encoding.utf8)!
        multipartFormData.append(data, withName: "stringParamName")
    
       //..... 
    

    【讨论】:

    • 我试过了,不幸的是不是解决方案
    【解决方案2】:

    我必须添加 .httpAdditionalHeaders b/c 我的服务器期待某些数据:

    RequestManager.sharedAlamofireManager.session.configuration.httpAdditionalHeaders = ["Accept": "application/json", "Content-Type": "multipart/form-data"]
    

    您可以通过将键/值对附加到此数组来添加更多配置。

    【讨论】:

      猜你喜欢
      • 2017-07-25
      • 1970-01-01
      • 1970-01-01
      • 2019-08-18
      • 1970-01-01
      • 2017-07-14
      • 2014-12-17
      • 1970-01-01
      • 2019-03-16
      相关资源
      最近更新 更多