【问题标题】:Using boundaries to HTTP Post multiple data使用边界 HTTP Post 多个数据
【发布时间】:2014-12-05 12:35:23
【问题描述】:

在我的 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 (Request Entity Too Large)

我认为问题在于我创建的请求正文错误。请求数据有问题吗?

【问题讨论】:

    标签: ios swift http-post nsurlsession


    【解决方案1】:

    两个问题

    1. 您过早地终止了正文。 --boundary-- 语法用于正文的结尾。

    2. 您没有正确编码 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 来创建这些多部分请求,因为它可以简化流程。


    参考资料:

    【讨论】:

    • 我觉得 AFNetworking 可以做得更好。现在我一定会试试的!现在,我已经用你的代码替换了我的代码,它工作正常。谢谢!
    猜你喜欢
    • 2012-06-20
    • 2011-01-19
    • 2016-09-08
    • 1970-01-01
    • 2016-05-01
    • 2023-03-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多