Как добавить более 2 параметров файла в multipartFormData в Swift - PullRequest
1 голос
/ 28 января 2020

Я новичок в swift, и я хочу добавить более одного параметра файла в несколько частей, мой код выглядит так

 func uploadWithAlamofirePDFAPI() {
        var paradict = NSMutableDictionary()
        let UrlPost =  Url            
        var Patientidstring = String()
        var Useridstring = String()
        var SurgeryDateString = String()
        var DischargeDateString = String()
        var FundDisbusmentDateString = String()
        var AmountString = String()
        var PatientConditionString = String()
        var IDString = String()

        Patientidstring = String(self.patient_idfromservernew)
        Useridstring = String(self.userId!)
        SurgeryDateString = String(surgery_datefromservernew)
        DischargeDateString = String(discharge_datefromservernew)
        FundDisbusmentDateString = String(fund_disbursement_datefromservernew)
        AmountString = String(txtAmount.text ?? "")
        PatientConditionString = String(txtPatientCondition.text ?? "")
        IDString = String(idservernewid)

        paradict = ["patient_id":Patientidstring,"hospital_id":Useridstring,"surgery_date":SurgeryDateString,"discharge_date":DischargeDateString,"fund_disbursement_date":FundDisbusmentDateString,"amount":AmountString,"patient_condition":PatientConditionString,"id":IDString,"type":"2"]

                 print(paradict)

          Alamofire.upload(multipartFormData: { multipartFormData in
             multipartFormData.append(self.datavalue, withName: "bill", fileName: self.FileNamewithFormat, mimeType:"application/pdf")

            for (key, value) in paradict {

                 print(key,value)

             multipartFormData.append((value as AnyObject).data(using: String.Encoding(rawValue: String.Encoding.utf8.rawValue).rawValue)!, withName: key as! String)
            }}, to: UrlPost, method: .post, headers: nil,
                encodingCompletion: { encodingResult in
                  switch encodingResult {
                  case .success(let upload, _, _):
                    upload.response { [weak self] response in
                      guard let strongSelf = self else {
                        return
                      }
                      debugPrint(response)

                     let alert = UIAlertController(title: nil, message: "Success", preferredStyle: .alert)
                     alert.addAction(UIAlertAction(title: "OK", style: .default, handler: { action in

                     let MasterPatientListVC = self?.storyboard!.instantiateViewController(withIdentifier: "MasterPatientListVC") as! MasterPatientListVC
                     self?.navigationController?.pushViewController(MasterPatientListVC, animated: true)

                 }))
                 self?.present(alert, animated: true)


                    }
                  case .failure(let encodingError):
                    print("error:\(encodingError)")

                     let alert = UIAlertController(title: nil, message: encodingError as! String, preferredStyle: .alert)
                     alert.addAction(UIAlertAction(title: "OK", style: .default, handler: { action in

                     }))
                     self.present(alert, animated: true)
                  }
          })
        }

Я хочу добавить еще 2 параметра здесь

   Alamofire.upload(multipartFormData: { multipartFormData in
                 multipartFormData.append(self.datavalue, withName: "bill", fileName: self.FileNamewithFormat, mimeType:"application/pdf") 

Когда я добавляю эту строку, отображается ошибка:

Alamofire.upload(multipartFormData: { multipartFormData in
             multipartFormData.append(self.datavalue, withName: "bill", fileName: self.FileNamewithFormat, mimeType:"application/pdf"),(self.datavalueClinicSummary, withName: "Clinic", fileName: self.FileNamewithFormatClinicSummary, mimeType:"application/pdf")

и сообщение об ошибке:

Последовательные операторы в строке должны быть разделены ';'

Clinic и Chemical - это два параметра, которые я хочу добавить их так же, как я добавил bill. Возможно ли это?

Если да, то как его добавить? Заранее спасибо!

Ответы [ 4 ]

2 голосов
/ 28 января 2020

Попробуйте,

Alamofire.upload(multipartFormData: { multipartFormData in
    multipartFormData.append(self.datavalue, withName: "bill", fileName: self.FileNamewithFormat, mimeType:"application/pdf")
    multipartFormData.append(self.datavalueClinicSummary, withName: "Clinic", fileName: self.FileNamewithFormatClinicSummary, mimeType:"application/pdf")
}

Вы не правильно сформулировали утверждение.

1 голос
/ 28 января 2020

Последовательные операторы в строке должны быть разделены знаком ';'

Приведенное выше сообщение об ошибке означает, что вы забыли написать код в новой строке.

Alamofire.upload(multipartFormData: { multipartFormData in
    multipartFormData.append(self.datavalue, withName: "bill", fileName: self.FileNamewithFormat, mimeType:"application/pdf")
    multipartFormData.append(self.datavalue, withName: "Clinic", fileName: self.FileNamewithFormat, mimeType:"application/pdf")
    multipartFormData.append(self.datavalue, withName: "Chemical", fileName: self.FileNamewithFormat, mimeType:"application/pdf")
0 голосов
/ 28 января 2020

Использовать один метод для загрузки в Alamofire:

Alamofire.upload(multipartFormData: {
            multipartFormData in
            if documents.count > 0 {
                for index in 0...documents.count - 1{
                    if documents[index].pathExtension == "png" || documents[index].pathExtension == "jpeg"{
                        multipartFormData.append(documents[index], withName: documentKeyName, fileName: documentName, mimeType: "image/png")
                    }else if documents[index].pathExtension == "gif"{
                        multipartFormData.append(documents[index], withName: documentKeyName, fileName: documentName, mimeType: "image/gif")
                    }else if documents[index].pathExtension == "tiff"{
                        multipartFormData.append(documents[index], withName: documentKeyName, fileName: documentName, mimeType: "image/tiff")
                    }else if documents[index].pathExtension == "pdf"{
                        multipartFormData.append(documents[index], withName: documentKeyName, fileName: documentName, mimeType: "application/pdf")
                    }else if documents[index].pathExtension == "vnd"{
                        multipartFormData.append(documents[index], withName: documentKeyName, fileName: documentName, mimeType: "application/vnd")
                    }else if documents[index].pathExtension == "txt" || documents[index].pathExtension == "doc" || documents[index].pathExtension == "docx" || documents[index].pathExtension == "rtf" || documents[index].pathExtension == "odt"{
                        multipartFormData.append(documents[index], withName: documentKeyName, fileName: documentName, mimeType: "text/plain")
                    }else{
                        multipartFormData.append(documents[index], withName: documentKeyName, fileName: documentName, mimeType: "application/octet-stream")
                    }
                }
            }

            for (key, value) in parameters {
                multipartFormData.append((value as AnyObject).data(using: String.Encoding.utf8.rawValue)!, withName: key)
            }
        }
0 голосов
/ 28 января 2020

Вы можете сделать что-то вроде кода ниже,

     Alamofire.upload(multipartFormData: { (multipartFormData) in

            let imageName = CommonMethods.randomString(length: 10)
            if let images = images {
                for image in images {
                    let data = image.jpegData(compressionQuality: 0.3)
                    multipartFormData.append(data ?? Data(), withName: imageParameterName ?? "", fileName: imageName + ".jpeg", mimeType: ModelKeys.MimeType.jpeg)
                }
            }

            if let croppedImages = croppedImages {
                for image in croppedImages {
                    let data = image.jpegData(compressionQuality: 0.3)
                    multipartFormData.append(data ?? Data(), withName: croppedImageParameterName ?? "", fileName: imageName + ".jpeg", mimeType: ModelKeys.MimeType.jpeg)
                }
            }

            for (key, value) in (parameter ?? [:]) {
                guard let data = "\(value)".data(using: String.Encoding.utf8) else { continue }
                multipartFormData.append(data, withName: key as String)
            }

        }, usingThreshold: UInt64.init(), to: completeURL, method: .post, headers: headerParam, encodingCompletion: { (result) in

            switch result {
            case .success(let upload, _, _):
                upload.responseJSON { response in
                    print(response)
                    if let responseDict = response.result.value as? [String: Any] {
                        success(responseDict)
                    } else {
                        failure(response.result.error)
                    }
                }
            case .failure(let error):
                failure(error)
            }
        })

Короче говоря, вам нужно звонить multipartFormData.append несколько раз! Вы также можете go l oop, как показано в примере выше!

...