首页 > 解决方案 > 我发布文件上传(多部分),但它在 swift4 中将空数据发送到 Web 服务

问题描述

在我的应用程序中,我尝试使用 Web 服务上传照片,但它发送空的服务。代码似乎没有错误,但不知道为什么。但是,当我尝试不带摄影的其他方法时,数据已满。我真的不明白是什么问题。如何解决这个问题?

func apiIsGuvenligi ()
{
    let imgData = UIImageJPEGRepresentation(imageView.image!, 0.2)!

    var request = URLRequest(url: URL(string: "http://glcwebapi.azurewebsites.net/api/JobSecurity/JobSecurity")!)
    request.httpMethod = "POST"

    let boundary = generateBoundaryString()

    request.setValue("application/x-www-form-urlencoded", forHTTPHeaderField: "Content-Type")
    request.setValue("application/json", forHTTPHeaderField: "Accept")

    request.addValue("Bearer \(self.token2)", forHTTPHeaderField: "Authorization")

    payload = ["MessageBody": textView.text!,
               "IsCallEmergencyTeam": acilDurum,
               "IsFireExtinguishUsed": yangin,
               "SendMyself": kendimeGonder,
               "LocationParameter": "\(latitude)-\(longitude)"
        ] as [String : AnyObject]

    if(imgData == nil)  { return }

    request.httpBody = createBodyWithParameters(parameters: payload as? [String : String], filePathKey: "file", imageDataKey: imgData as NSData, boundary: boundary) as Data

    apiKontrol = true

    let task = URLSession.shared.dataTask(with: request) { data, response, error in

        guard let data = data, error == nil else {
            self.hataMesaji = "Hata=\(String(describing: error))"
            return
        }
        do {

            let json = try JSONSerialization.jsonObject(with: data, options: .allowFragments) as! [String:Any]

            let error = json["Data"] as? String

            if error == nil
            {

            }
            else
            {
                self.mesajVer2(mesaj: error!)
                self.hataMesaji = "\(String(describing: error))"
            }
        }
        catch let error as NSError {
            print(error)
        }

        // Apiden gelen tüm keys-values, veriler parse edilip kullanılır.
        let responseString = String(data: data, encoding: .utf8)
        print("responseString iş güvenliği = \(String(describing: responseString))")
    }
    task.resume()
}

func createBodyWithParameters(parameters: [String: String]?, filePathKey: String?, imageDataKey: NSData, boundary: String) -> NSData {
    let body = NSMutableData()

    if payload != nil {
        for (key, value) in payload {
            body.appendString(string: "--\(boundary)\r\n")
            body.appendString(string: "Content-Disposition: form-data; name=\"\(key)\"\r\n\r\n")
            body.appendString(string: "\(value)\r\n")

            print("key \(key) \(value)")
        }
    }

    let filename = "image.jpg"

    let mimetype = "image/jpg"

    body.appendString(string: "--\(boundary)\r\n")
    body.appendString(string: "Content-Disposition: form-data; name=\"PhotoRequest\"; filename=\"\(filename)\"\r\n")
    body.appendString(string: "Content-Type: \(mimetype)\r\n\r\n")
    body.append(imageDataKey as Data)
    body.appendString(string: "\r\n")

    body.appendString(string: "--\(boundary)--\r\n")

    return body
}

func generateBoundaryString() -> String {
    return "Boundary-\(NSUUID().uuidString)"
}

// extension for image uploading
extension NSMutableData {

func appendString(string: String) {
    let data = string.data(using: String.Encoding.utf8, allowLossyConversion: true)
    append(data!)
  }
}

标签: apiweb-servicesswift4content-type

解决方案


推荐阅读