在IOS中上载带参数的多部分图像

在IOS中上载带参数的多部分图像,ios,swift,alamofire,Ios,Swift,Alamofire,我是新的IOS n想要上传的图像与参数到服务器,但它没有上传。我尝试了很多关于alamofire和base64的参考资料,但都不适合我。我是否错过了任何东西,任何有助于理解这一点的东西 提前谢谢。请帮我解决这个问题 下面是我的代码: @IBAction func submitBtnClicked(_ sender: Any) { //parameters var number: Int? number = 47000482 var srNumber = Stri

我是新的IOS n想要上传的图像与参数到服务器,但它没有上传。我尝试了很多关于alamofire和base64的参考资料,但都不适合我。我是否错过了任何东西,任何有助于理解这一点的东西

提前谢谢。请帮我解决这个问题

下面是我的代码:

@IBAction func submitBtnClicked(_ sender: Any)

{
    //parameters
    var number: Int?
    number = 47000482
    var srNumber = String(format:"%d",number!)
    var urlString: String = filePath!.absoluteString
    var parameters = ["s_no":srNumber, "count":"1"]
    let imgData = UIImageJPEGRepresentation(self.chosenImage!, 0.5)

    print(parameters)
    print(imgData)

    Alamofire.upload(multipartFormData: { (multipartFormData) in

        multipartFormData.append(imgData!, withName:"filestream", fileName:(self.filePath?.lastPathComponent)!, mimeType: "image/jpeg")

        for (key, value) in parameters {
            multipartFormData.append(value.data(using: String.Encoding.utf8)!, withName:key)
        }
    }, to:"https://********************")

    { (result) in

        switch result {
        case .success(let upload, _, _):

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

            upload.responseJSON { response in
                print(response.request)  // original URL request
                print(response.response) // URL response
                print(response.data)     // server data
                print(response.result)   // result of response serialization

                if let JSON = response.result.value {
                    print("JSON: \(JSON)")
                }
            }

        case .failure(let encodingError):
            //self.delegate?.showFailAlert()
            print(encodingError)
        }
    }
}

首先,您需要添加方法类型,即post或.put类型以及url,然后您将能够发送图像数据,并增加会话请求的超时时间间隔manager.session.configuration.timeoutitervalforrequest=120,如果您有任何疑问,请回复我,我将尝试解决您的问题问题

class func requestForAPI(param:Dictionary<String, String>?, Url:String,image:UIImage,isShowLoader:Bool, headers:[String:String]?,  completion: @escaping (_ result: AnyObject?, _ error: Error?) -> Void) {

  let reach:Reachability = Reachability.forInternetConnection()
  let netStatus:NetworkStatus = reach.currentReachabilityStatus()
if (netStatus == NotReachable)
{

    NSUtility.shared().showMessage(title: "Alert!", body: "Please connect to the internet to continue", themetype: .error)

    return
}

if isShowLoader == true{
    APPDELEGATE?.showLoaderView()
}

let manager = Alamofire.SessionManager.default
manager.session.configuration.timeoutIntervalForRequest = 120
let  imageData = image.jpegData(compressionQuality: 0.8)

manager.upload(multipartFormData:
    {
        (multipartFormData) in
        multipartFormData.append(imageData, withName: "file", fileName:    "file.jpeg", mimeType: "image/jpeg") for (key, value) in param {
             multipartFormData.append(value.data(using:String.Encoding.utf8.rawValue)!, withName: key)

}, to:URL(string: Url)!,method:.put, headers:headers)
{ (result) in
    switch result {
    case .success(let upload,_,_ ):
        upload.uploadProgress(closure: { (progress) in
            //Print progress
        })
        upload.responseJSON
            { response in
                APPDELEGATE?.dismissLoader()

                //print response.result
                if response.result.value != nil
                {

                    print (response.result.value as Any)
                    completion(response.result.value as AnyObject? , nil)
                }
        }
    case .failure(let encodingError):
          print(encodingError)
          completion(nil, encodingError)
        break
    }
}}}  
class-func-requestForAPI(参数:Dictionary?、Url:String、image:UIImage、isShowLoader:Bool、headers:[String:String]?、完成:@escaping(\uresult:AnyObject?、\uerror:error?)->Void){
let reach:Reachability=Reachability.forInternetConnection()
让netStatus:NetworkStatus=reach.currentReachabilityStatus()
if(netStatus==NotReachable)
{
NSUtility.shared().showMessage(标题:“警报!”,正文:“请连接到internet以继续”,主题:。错误)
返回
}
如果isShowLoader==真{
APPDELEGATE?.showLoaderView()
}
让manager=Alamofire.SessionManager.default
manager.session.configuration.timeoutitervalforrequest=120
让imageData=image.jpegData(压缩质量:0.8)
manager.upload(multipartFormData:
{
(multipartFormData)在
为参数中的(键,值)追加(imageData,名称:“file”,文件名:“file.jpeg”,mimeType:“image/jpeg”){
multipartFormData.append(value.data(使用:String.Encoding.utf8.rawValue)!,名称:key)
},收件人:URL(字符串:URL)!,方法:。放置,标题:标题)
(结果)
切换结果{
成功案例(让我们上传,,u):
uploadProgress(闭包:{(进度)在
//打印进度
})
upload.responseJSON
{答复
APPDELEGATE?.dismissLoader()
//打印响应结果
如果response.result.value!=nil
{
打印(response.result.value,如有)
完成(response.result.value为AnyObject?,无)
}
}
案例失败(let encodingError):
打印(编码错误)
完成(无,编码错误)
打破
}
}}}  

您能告诉我错误吗?你们能上传完整的代码以便我调试吗?在这里发布之前,请正确格式化你们的代码。在请求中添加HttpMethod。您可以在标题中尝试“内容类型:Multipart/*”。
class func requestForAPI(param:Dictionary<String, String>?, Url:String,image:UIImage,isShowLoader:Bool, headers:[String:String]?,  completion: @escaping (_ result: AnyObject?, _ error: Error?) -> Void) {

  let reach:Reachability = Reachability.forInternetConnection()
  let netStatus:NetworkStatus = reach.currentReachabilityStatus()
if (netStatus == NotReachable)
{

    NSUtility.shared().showMessage(title: "Alert!", body: "Please connect to the internet to continue", themetype: .error)

    return
}

if isShowLoader == true{
    APPDELEGATE?.showLoaderView()
}

let manager = Alamofire.SessionManager.default
manager.session.configuration.timeoutIntervalForRequest = 120
let  imageData = image.jpegData(compressionQuality: 0.8)

manager.upload(multipartFormData:
    {
        (multipartFormData) in
        multipartFormData.append(imageData, withName: "file", fileName:    "file.jpeg", mimeType: "image/jpeg") for (key, value) in param {
             multipartFormData.append(value.data(using:String.Encoding.utf8.rawValue)!, withName: key)

}, to:URL(string: Url)!,method:.put, headers:headers)
{ (result) in
    switch result {
    case .success(let upload,_,_ ):
        upload.uploadProgress(closure: { (progress) in
            //Print progress
        })
        upload.responseJSON
            { response in
                APPDELEGATE?.dismissLoader()

                //print response.result
                if response.result.value != nil
                {

                    print (response.result.value as Any)
                    completion(response.result.value as AnyObject? , nil)
                }
        }
    case .failure(let encodingError):
          print(encodingError)
          completion(nil, encodingError)
        break
    }
}}}