快速使用多部分格式数据发送带有某些参数的图像

时间:2018-07-12 21:17:18

标签: ios swift runtime-error multipartform-data

我正在尝试发送照片,该照片将从我的应用程序中的相机或照相馆拍摄。我搜索了整个站点,发现了一些有用的代码。然后,我对其进行了一些自定义。

    let imageData = UIImageJPEGRepresentation(myImageView.image!, 1)

    if imageData != nil{
        let request = NSMutableURLRequest(url: NSURL(string:"http://app.avatejaratsaba1.com/api/Ticket/SendTicket")! as URL)
        var session = URLSession.shared

        request.httpMethod = "POST"

        let boundary = NSString(format: "---------------------------14737809831466499882746641449")
        let contentType = NSString(format: "multipart/form-data; boundary=%@",boundary)
        //  println("Content Type \(contentType)")
        request.addValue(contentType as String, forHTTPHeaderField: "Content-Type")

        let body = NSMutableData()

        // Title
        body.append(NSString(format: "\r\n--%@\r\n",boundary).data(using: String.Encoding.utf8.rawValue)!)
        body.append(NSString(format:"Content-Disposition: form-data; name=\"title\"\r\n\r\n").data(using: String.Encoding.utf8.rawValue)!)
        body.append("Hello World".data(using: String.Encoding.utf8, allowLossyConversion: true)!)

        // Image
        body.append(NSString(format: "\r\n--%@\r\n", boundary).data(using: String.Encoding.utf8.rawValue)!)
        body.append(NSString(format:"Content-Disposition: form-data; name=\"profile_img\"; filename=\"img.jpg\"\\r\n").data(using: String.Encoding.utf8.rawValue)!)
        body.append(NSString(format: "Content-Type: application/octet-stream\r\n\r\n").data(using: String.Encoding.utf8.rawValue)!)
        body.append(imageData!)
        body.append(NSString(format: "\r\n--%@\r\n", boundary).data(using: String.Encoding.utf8.rawValue)!)



        request.httpBody = body as Data

        do{
        let returnData = try NSURLConnection.sendSynchronousRequest(request as URLRequest, returning: nil)

        let returnString = NSString(data: returnData, encoding: String.Encoding.utf8.rawValue)

        print("returnString \(returnString)")
    }
    catch{print("gg")
    }


}

现在,当我运行此函数时,服务器将返回:

  

502-Web服务器在充当服务器时收到无效响应   网关或代理服务器。

     

您要查找的页面有问题,并且   无法显示。当Web服务器(充当网关或   代理)与上游内容服务器联系,则收到无效信息   内容服务器的响应。

这是因为我没有发送3个参数。我想知道如何添加参数(2个字符串,1个整数-总计:2个字符串,1个整数,1个图像)

关于如何添加参数的任何建议?

Api

1 个答案:

答案 0 :(得分:1)

无论好坏,我不得不为iOS编写许多多部分的mime编码器-尽管所有这些都是在Objective-C中实现的。您可以在RFC中找到有关格式的所有详细信息。我确实无法忍受这种格式,但是在没有二进制格式的情况下将二进制数据发送到HTTP服务器具有挑战性。

在我看来,您快要到了。您只需要在邮件中添加更多的多部分内容即可。

您可以在this question中看到一些示例。