如何在Alamofire中的参数中上传文件和传递数据-迅速5

问题描述 投票:0回答:2

如何在Alamofire中的参数中上传文件并传递数据-swift 5

我需要解决此问题的方法我想使用参数

中的数据将图片上传到服务器

这是邮递员的要求enter image description hereenter image description here

这是我的解决方案::

         func createPhoto(name : String , email : String,gender:String,region:String,bod:String,activity_name:String,organisation_name:String,photo: UIImage, completion: @escaping (_ error: Error?, _ success: Bool)->Void) {


            var Token : String?
                   var  tasksMO = [NSManagedObject]()
                   let request = NSFetchRequest<NSFetchRequestResult>(entityName: "ConfirmActivationEntity")
                   do {
                       let results = try pe.context.fetch(request)
                       tasksMO = results as! [NSManagedObject]
                       for taskmo in tasksMO {
                           Token = (taskmo.value(forKey: "access_token")  as! String )
                       }
                       print("assbil")
                   } catch {
                       print("fild")
                   }
             print(" Token :\(Token!)")

            let headers : HTTPHeaders = ["Authorization":"Bearer \(Token!)","X-HTTP-Method-Override":"PUT","Accept-Language" : Locale.current.languageCode ?? "ar", "Content-Type" : "application/x-www-form-urlencoded","Accept" : "application/json"]


            let parameters : Parameters = ["name" : name,"region":region,"activity_id":ActivityCode!,"organization_id":OrganizationCode!,"gender":gender,"job_id":JobCode!,"interest_id":IntrestedCode!,"organisation_name":organisation_name,"activity_name":activity_name,"bod":bod,"city":region,"email":email,"profile_pic":photo]

            guard let url = URL(string: "\(UrlApi.url)\(UrlApi.crateUser)") else { return }


            Alamofire.upload(multipartFormData: { (form: MultipartFormData) in

                for (key, value) in parameters {
                    form.append("\(value)".data(using: String.Encoding.utf8)!, withName: key as String)
                }

//                if let data = imagedata{
//                    multipartFormData.append(data, withName: "imagename", fileName: "imagename.jpg", mimeType: "image/jpeg")
//                }

                if let data = photo.jpegData(compressionQuality: 0.5) {
                    form.append(data, withName: "profile_pic", fileName: "photo.png", mimeType: "image/png")
                }

            }, usingThreshold: SessionManager.multipartFormDataEncodingMemoryThreshold, to: url,method: .post, headers: headers) { (result: SessionManager.MultipartFormDataEncodingResult) in

                switch result {
                case .failure(let error):
                    print(error)
                    completion(error, false)

                case .success(request: let upload, streamingFromDisk: _, streamFileURL: _):

                    upload.uploadProgress(closure: { (progress: Progress) in
                        print(progress)
                    })
                    .responseJSON(completionHandler: { (response: DataResponse<Any>) in

                        switch response.result
                        {
                        case .failure(let error):
                            print(error)
                            completion(error, false)

                        case .success(let value):
                            let json = JSON(value)
                            print(json)

                            if let status = json["status"].toInt, status == 1 {
                                // success
                                print("Upload Succeed")
                                completion(nil, true)
                            } else {
                                print("Upload Failed")
                                completion(nil, false)
                            }
                        }

                    })
                }

           }

        }


并且此响应来自发球:

responseSerializationFailed(reason: Alamofire.AFError.ResponseSerializationFailureReason.jsonSerializationFailed(error: Error Domain=NSCocoaErrorDomain Code=3840 "Invalid value around character 0." UserInfo={NSDebugDescription=Invalid value around character 0.}))

[我在iOS 13,Swift 5和Xcode 11上使用Alamofire pod和SwiftyJson pod

请帮助我:)

ios swift alamofire
2个回答
0
投票

不将图像包含在参数字典中。或按如下所示添加到MultipartFormData时跳过它]

Alamofire.upload(multipartFormData: { (form: MultipartFormData) in
    for (key, value) in parameters {
        if !(value is UIImage), let data = "\(value)".data(using: .utf8) {
            form.append(data, withName: key as String)
        }
    }
    if let data = photo.jpegData(compressionQuality: 0.5) {
        form.append(data, withName: "profile_pic", fileName: "photo.png", mimeType: "image/png")
    }
}

0
投票

您应该在MultipartFormData中传递图像数据,而不是在parameter词典中传递其他参数。

© www.soinside.com 2019 - 2024. All rights reserved.