【问题标题】:Uploading Image to Node.js express server Swift将图像上传到 Node.js 快速服务器 Swift
【发布时间】:2017-06-14 04:28:34
【问题描述】:

我目前正在创建一个应用程序,在该应用程序中,我将使用 multer 中间件将图像从 iOS 设备发送到我的 expressjs 服务器。我已经设置了服务器端,但我相信我在客户端有一个错误,因为我无法让我的 POST 请求正常工作。这是我的快速代码。

        class func changeChannelImage(handle: String, imageURL: URL, completionHandler: @escaping (Int?, Error?) -> Void){
    let baseURL = "http://10.0.0.220:3000/channel/channelImage?handle=\(handle)"

    func createRequestBodyWith(parameters:[String:NSObject], boundary:String) -> Data{

        var body = Data()

        for (key, value) in parameters {
            body.appendString(string: "--\(boundary)\r\n")
            body.appendString(string: "Content-Disposition: form-data; name=\"\(key)\"\r\n\r\n")
            body.appendString(string: "\(value)\r\n")
        }

        body.appendString(string: "--\(boundary)\r\n")

        var mimetype = "image/png"

        let defFileName = "channelImage.png"
        print(imageURL.absoluteString)
        do {
            var data = try Data(contentsOf: imageURL) //Image file URL in device's directory
            var image = UIImage(data: data)

            let imageData = UIImagePNGRepresentation(image!)

            body.appendString(string: "Content-Disposition: form-data; filename=\"\(defFileName)\"\r\n")
            print("Content-Type: \(mimetype)\r\n\r\n")
            body.appendString(string: "Content-Type: \(mimetype)\r\n\r\n")
            body.append(imageData!)
            body.appendString(string: "\r\n")

            body.appendString(string: "--\(boundary)--\r\n")
        }
        catch {
            print(error.localizedDescription)
        }

        return body
    }
    func generateBoundaryString() -> String {
        return "Boundary-\(NSUUID().uuidString)"
    }

    var request = URLRequest(url: URL(string: baseURL)!)
    request.httpMethod = "POST"
    let boundary = generateBoundaryString()
    request.setValue("multipart/form-data; boundary=\(boundary)", forHTTPHeaderField: "Content-Type")
    request.httpBody = createRequestBodyWith(parameters: [:], boundary: generateBoundaryString())


    let session = URLSession.shared
    let task = session.dataTask(with: request) { (data, response, error) in
        if error == nil {
                let res = response as! HTTPURLResponse
                let code = res.statusCode
                if code != 200 {
                    print(String(data: data!, encoding: .utf8))
                }
                DispatchQueue.main.async {
                    completionHandler(code, nil)
                }
        }
        else {
            print(error!)
            DispatchQueue.main.async {
                completionHandler(0, error)
            }

        }
    }
    task.resume()

}

有谁知道为什么图像文件不能被服务器正确读取?任何帮助将不胜感激。

【问题讨论】:

    标签: node.js swift express httprequest multer


    【解决方案1】:

    将你的图片数据转换成base64字符串,然后附加到body中

    【讨论】:

      猜你喜欢
      • 2019-09-14
      • 1970-01-01
      • 2016-08-23
      • 2017-04-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多