使用 Alamofire 从图库上传带有参数和 header 的图片

Upload image from gallery with parameters and header using Alamofire

我正在尝试上传图片,但还需要传递参数 header,从 google 那里获得了有关参数的帮助,但也不知道如何传递 header。传递下面的代码,请指导。

下面是我的代码:

if (request.requestType == "Multipart")
    {
        var strToken : String = ""
        if let access_token = UserDefaults.standard.string(forKey: "auth_token"){
            let tokenValue = String(format: "Token %@", access_token);
            strToken = tokenValue
        }

        let headers: HTTPHeaders = [
            "Authorization": strToken,
            "Content-Type": "multipart/form-data"
        ]

        let img = request.image 
        let imgData = UIImageJPEGRepresentation(img, 0.2)!
        do{

            let strURL = try strCompleteURL.asURL()
        Alamofire.upload(multipartFormData: { multipartFormData in
            multipartFormData.append(imgData, withName: "image_path",fileName: "file.jpg", mimeType: "image/jpg")
            for (key, value) in params {
                multipartFormData.append(value.data(using: String.Encoding.utf8.rawValue)!, withName: key)
            }
        },
                         to:strURL)
        { (result) in
            switch result {
            case .success(let upload, _, _):

                upload.uploadProgress(closure: { (progress) in
                    print("Upload Progress: \(progress.fractionCompleted)")
                })

                upload.responseJSON { response in
                    if response.result.isSuccess {
                        print(response.result.value as Any)
                        if let data = response.data{
                            self.response.responseCode = response.response?.statusCode
                            self.processResult(data);
                        }
                    }
                }

            case .failure(let encodingError):

                    print(encodingError)
            }
        }
        }
        catch{

        }

以上代码尝试上传图片,但由于缺少 header 而未成功,请指导如何传递 header 和参数。

谢谢

你好我用过headers这样的

func uploadImage( image:UIImage, url:String, _ successBlock:@escaping ( _ response: JSON )->Void , errorBlock: @escaping (_ error: NSError) -> Void ){

        let path =  baseUrl + url
        print(path)


        let headers = ["authorization": AppData().token]
        let imgData = UIImageJPEGRepresentation(image, 0.2)!

        let URL = try! URLRequest(url: path, method: .post, headers: headers)


        Alamofire.upload(multipartFormData: { (multipartFormData) in
            multipartFormData.append(imgData, withName: "image",fileName: "file.jpg", mimeType: "file")
for (key, value) in params {
                    multipartFormData.append(value.data(using: String.Encoding.utf8.rawValue)!, withName: key)
                }
        }, with: URL) { (result) in
            switch result {
            case .success(let upload, _, _):

                upload.uploadProgress(closure: { (progress) in
                    print("Upload Progress: \(progress.fractionCompleted)")
                })

                upload.responseJSON { response in
                    print(response.result.value)
                    if let value = response.result.value {
                        let json = JSON(value)
                        successBlock(json)
                    }
                }

            case .failure(let encodingError):
                print(encodingError)
                errorBlock(encodingError as NSError)

            }
        }

    }

Alamofire .upload() 函数的可用参数比您使用的要多。 (这可以在他们的 pod 文件夹中的 Alamofire.swift 文件中看到)

public func upload(
multipartFormData: @escaping (MultipartFormData) -> Void,
usingThreshold encodingMemoryThreshold: UInt64 = SessionManager.multipartFormDataEncodingMemoryThreshold,
to url: URLConvertible,
method: HTTPMethod = .post,
headers: HTTPHeaders? = nil,
encodingCompletion: ((SessionManager.MultipartFormDataEncodingResult) -> Void)?)
{
    return ...
}

在那里你可以看到headers有一个你没有用到的参数。

如果没有 运行 自己编写代码并检查所有内容,这将是我对 headers 的最佳假设