首页 > 解决方案 > 快速使用多部分格式数据发送带有一些参数的图像

问题描述

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

    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

标签: iosswiftruntime-errormultipartform-data

解决方案


不管是好是坏,我不得不为 iOS 编写许多多部分 mime 编码器——尽管都是在 Objective-C 中。您可以在RFC中找到有关该格式的所有详细信息。我真的受不了这种格式,但是没有它就很难将二进制数据发送到 HTTP 服务器。

在我看来,你就快到了。您只需要在消息中添加更多的多部分。

您可以在这个问题中看到一些示例。


推荐阅读