【问题标题】:Swift Alamofire multipart form data URLRequest has no member failureSwift Alamofire 多部分表单数据 URLRequest 没有成员失败
【发布时间】:2021-11-15 06:59:24
【问题描述】:

我正在尝试在我的应用程序中连接图像上传。我正在使用 Alamofire 和 Alamofire 中的 multipartFormData 功能来实现这一点。

我已经编写了函数来上传这张图片以及其他属性。

func savePreferences(parameters: [String:Any], image: UIImage, completion: @escaping (Response?, Error?) -> Void) {
    let url = "http://localhost:3000/users/3b4e124d-3b3c-4c71-8e05-013e461c2892"
    let imgData = image.jpegData(compressionQuality: 0.5)!

    AF.upload(multipartFormData: { multipartFormData in
        multipartFormData.append(imgData, withName: "profile_imgname",fileName: "ProfilePic_\(UserDefaults.standard.string(forKey: "user_id") ?? "").jpg", mimeType: "image/jpg")
        for (key, value) in parameters {
            multipartFormData.append((value as AnyObject).data(using: String.Encoding.utf8.rawValue)!, withName: key)
        }
    }, to: url, method: .patch) { (result) in
        switch result {
        case .success(let upload):
            upload.responseJSON { response in
                if let err = response.error {
                    failure(err)
                    return
                }
                completion(response.result.value)
            }
        case .failure(let error):
            print("Error in upload: \(error.localizedDescription)")
        }
    }
}

在最后的switch 语句中,在case .successcase .failure 中,我收到以下错误:

类型“URLRequest”没有成员“失败”

类型“URLRequest”没有成员“成功”

我已经使用现有的 Stack Overflow 资源来了解 multipartFormData 的工作原理,并且它们似乎在一定程度上遵循了这种格式。

请看下面:

Send POST parameters with MultipartFormData using Alamofire, in iOS Swift

How to upload pictures with Alamofire (post)?

为什么我会收到 URLRequest has no member failure 的错误,我该如何纠正这个错误?

【问题讨论】:

    标签: ios swift alamofire


    【解决方案1】:

    Alamofire 5.0 迁移文档是这样说的:

    MultipartFormData 的 API 发生了变化,创建和上传 MultipartFormData 的顶级上传方法已更新以匹配其他请求 API,因此不再需要处理多部分编码的 Result。

    (https://github.com/Alamofire/Alamofire/blob/master/Documentation/Alamofire%205.0%20Migration%20Guide.md)

    您使用的代码看起来来自早期版本。在 5.0 中,尾随闭包使用 URLRequest 作为其参数(解释您看到的错误)。

    使用指南 (https://github.com/Alamofire/Alamofire/blob/master/Documentation/Usage.md) 提供了此作为上传多部分表单数据的示例:

    AF.upload(multipartFormData: { multipartFormData in
        multipartFormData.append(Data("one".utf8), withName: "one")
        multipartFormData.append(Data("two".utf8), withName: "two")
    }, to: "https://httpbin.org/post")
        .responseDecodable(of: HTTPBinResponse.self) { response in
            debugPrint(response)
        }
    

    HTTPBinResponseDecodable 的一个示例,您可以将其替换为您自己的)。

    除了responseDecodable,貌似还可以使用responseJSONresponseDataresponseString等。

    请注意,所有这些都附加了一个. 结束调用的) -- 不是作为尾随闭包。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-29
      • 2013-04-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多