Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 使用Alamofire从gallery上传带有参数和标题的图像_Ios_Swift_Alamofire_Multipartform Data - Fatal编程技术网

Ios 使用Alamofire从gallery上传带有参数和标题的图像

Ios 使用Alamofire从gallery上传带有参数和标题的图像,ios,swift,alamofire,multipartform-data,Ios,Swift,Alamofire,Multipartform Data,我试图上传图像,但需要传递参数和标题,从谷歌获得了有关参数的帮助,但没有得到如何传递标题也。传递下面的代码,请引导 下面是我的代码: if (request.requestType == "Multipart") { var strToken : String = "" if let access_token = UserDefaults.standard.string(forKey: "auth_token"){ let toke

我试图上传图像,但需要传递参数和标题,从谷歌获得了有关参数的帮助,但没有得到如何传递标题也。传递下面的代码,请引导

下面是我的代码:

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{

        }
上面的代码尝试上载图像,但由于缺少标头而未成功,请指导如何传递标头和参数


谢谢

嗨,我用过这样的标题

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)

            }
        }

    }

嗨,我用过这样的标题

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文件中看到)

在这里,您可以看到有一个未使用的标题参数


如果不亲自运行代码并检查所有内容,这将是我对标题位置的最佳假设。Alamofire
.upload()
函数的可用参数比您使用的要多。(这可以在其pod文件夹中的Alamofire.swift文件中看到)

在这里,您可以看到有一个未使用的标题参数


如果我不亲自运行代码并检查所有内容,这将是我最好的假设,说明你的头会去哪里

这行的问题让URL=try!URLRequest(url:path,method:.post,headers:headers)出现了什么问题?我从api收到的响应是FAILURE:ResponseSerializationFaild(Alamofire.AFError.ResponseSerializationFailureReason.JSONSerializationFaild(Error Domain=NSCOCAerorDomain Code=3840“字符0周围的值无效”。UserInfo={NSDebugDescription=字符0周围的值无效。})▿ 失败:一个错误▿ responseSerializationFailed:ResponseSerializationFaileureReason可能是它的另一个问题。请检查postmani中的API响应,看看参数没有传入itProblem,这一行让URL=try!URLRequest(URL:path,method:.post,headers:headers)出现了什么问题?我从api收到的响应是失败:responseSerializationFailed(Alamofire.AFError.ResponseSerializationFailureReason.jsonSerializationFailed(错误域=NSCOCAErrorDomain代码=3840“字符0周围的无效值”。用户信息={NSDebugDescription=字符0周围的无效值。}))▿ 失败:一个错误▿ responseSerializationFailed:ResponseSerializationFaileureReason可能是其不同的问题。请将API响应检查到postmani中,以查看参数是否未传入