【问题标题】:how to upload Data to API?如何将数据上传到 API?
【发布时间】:2018-10-03 12:06:05
【问题描述】:

我需要将数据上传到 API。参数:

我有下一个代码:

static func uploadNewInfo(uploadData: Data) {
        if let url = URL(string: TaskManager.httpString + "sett_eic.htm") {
            var request = URLRequest(url: url)
            request.httpMethod = "POST"
            request.httpBody = uploadData
            request.setValue("multipart/form-data", forHTTPHeaderField: "Content-Type")
            let task = URLSession.shared.dataTask(with: request) { (data, response, error) in
                if error == nil {
                    print("uploaded")
                }
            }
//            let task = URLSession.shared.uploadTask(with: request, from: uploadData) { (data, response, error) in
//                if error == nil {
//                    print("uploaded")
//                }
//            }
            task.resume()
        }
    }   

但是回复是"500 Internal Server Error: Expected data not present\r\n"
我不明白如何上传这些数据。我读了一些关于如何上传图片的答案,但不明白。我的数据不是图像。它是字节,描述名称、状态等。

更新

这是请求在浏览器中的外观:

与 PRF64 部分... - 上传数据

【问题讨论】:

  • uploadData 中有什么内容?
  • @Ladislav,这是转换为数据的字符串

标签: ios swift api upload


【解决方案1】:

你可以试试这个:

func uploadNewInfo(uploadData: Data) {
    let boundry = "**********"
    if let url = URL(string: TaskManager.httpString + "sett_eic.htm") {
        var request = URLRequest(url: url)
        request.httpMethod = "POST"
        //        request.httpBody = uploadData
        request.addValue("multipart/form-data; boundary=\(boundry)", forHTTPHeaderField: "Content-Type")
        var dataForm = Data()
        dataForm.append("\r\n--\(boundry)\r\n".data(using: .utf8)!)
        dataForm.append("Content-Disposition: form-data; name=\"param1\";\r\n\r\n10001".data(using: .utf8)!)
        dataForm.append(uploadData)
        dataForm.append("\r\n--\(boundry)--\r\n".data(using: .utf8)!)
        request.httpBody = dataForm

        let task = URLSession.shared.dataTask(with: request) { (data, response, error) in
            if error == nil {
                print("uploaded")
            }
        }
        task.resume()
    }
}

如果它有效,请告诉我:)

【讨论】:

  • 我试过了,但还是不行。我不明白为什么。
  • 您的网址可能有问题。因为我使用此代码发送了请求,并且它在我的 URL 上成功了。可以分享你的网址吗?
  • 你的代码有一点小错误。我修复了它,应用它,它是有效的。
【解决方案2】:

你可以使用Alamofire

 func UploadData(uploadData: Data){
let paramter = ["data":Data]
let Header = ["Authorization":"Bearer ..."]

Alamofire.request("", method: .post, parameters: parameter, headers: Header).responseJSON(completionHandler: { (response) in

guard let value = response.result.value as? NSDictionary

}

【讨论】:

  • 感谢您的回答,但我现在不在我的项目中使用 Alamofire
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-01-08
  • 1970-01-01
  • 1970-01-01
  • 2020-05-31
  • 2021-02-08
  • 1970-01-01
  • 2018-06-01
相关资源
最近更新 更多