在我的iOS应用程序中,我试图将数据发布到具有HTTP Post请求的服务器。我使用以下方法来创建请求正文;
func createBodyWithParameters(filePathKey: String?, boundary: String) -> NSData {
let body = NSMutableData()
let filename = String(format: "%lld.jpg", NSDate().timeIntervalSince1970 * 1000)
let data = UIImageJPEGRepresentation(self.photoTaken , 0.6)
println(data.length)
let mimetype = "image/png"
body.appendString("--\(boundary)\r\n")
body.appendString("Content-Disposition: form-data; name=\"\(filePathKey!)\"; filename=\"\(filename)\"\r\n")
//body.appendString("Category: \(self.categoryAbbreviations[self.tag])\r\n")
body.appendString("Content-Type: \(mimetype)\r\n\r\n")
body.appendData(data!)
body.appendString("\r\n")
body.appendString("--\(boundary)--\r\n")
body.appendString("Category: \(self.categoryAbbreviations[self.tag])\r\n")
body.appendString("--\(boundary)--\r\n")
return body
}
我将类别信息和图像数据与边界分开。但是,服务器使用HTTP错误400(错误请求)对此进行响应。如果我尝试将类别信息和图像数据一起发送,我收到HTTP错误413(请求实体太大)
我认为问题在于我创建了我的请求体错了。请求数据有问题吗?
答案 0 :(得分:1)
两个问题
你太快终止了身体。 --boundary--
语法用于正文的末尾。
您未对Category
值进行正确编码。
所以,它应该看起来像:
// add category
body.appendString("--\(boundary)\r\n")
body.appendString("Content-Disposition: form-data; name=\"Category\"\r\n\r\n")
body.appendString("\(self.categoryAbbreviations[self.tag])\r\n")
// now all done
body.appendString("--\(boundary)--\r\n")
坦率地说,人们可能会考虑使用AFNetworking来创建这些多部分请求,因为它简化了流程。
参考文献: