上传图片到服务器 – Swift 3

我想发送一个图像作为参数与我的要求。 我用下面的代码来调用我的POST请求,但我不知道如何将图像附加到正文。

我通过图像select器获取图像如下:

if let image = info[UIImagePickerControllerOriginalImage] as? UIImage { 

我的请求形成如下

 var request = URLRequest(url: URL(string: "")!) // link removed request.httpMethod = "POST" let postString = "user_id=\(userId)&image=\(image)" request.httpBody = postString.data(using:.utf8) let task = URLSession.shared.dataTask(with: request) { data, response, error in guard let data = data, error == nil else { // check for fundamental networking error return } do { let json = try JSONSerialization.jsonObject(with: data, options: .mutableContainers) as? AnyObject if let parseJSON = json { print("resp :\(parseJSON)") } } catch let error as NSError { print("error : \(error)") } } task.resume() 

我是Swift新手。 我已经通过多部分/forms数据看到了这一点,但是我自己无法实现。 我不想用base64格式进行编码。 请帮助我。

我使用以下结构发送图像:

 func createRequestBodyWith(parameters:[String:NSObject], filePathKey:String, boundary:String) -> NSData{ let body = NSMutableData() 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/jpg" let defFileName = "yourImageName.jpg" let imageData = UIImageJPEGRepresentation(yourImage, 1) body.appendString(string: "Content-Disposition: form-data; name=\"\(filePathKey!)\"; filename=\"\(defFileName)\"\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") return body } func generateBoundaryString() -> String { return "Boundary-\(NSUUID().uuidString)" } extension NSMutableData { func appendString(string: String) { let data = string.data(using: String.Encoding.utf8, allowLossyConversion: true) append(data!) } 

然后在你的函数中创build这样的主体:

 request.httpBody = self.createRequestBodyWith(parameters:yourParamsDictionary, filePathKey:yourKey, boundary:self.generateBoundaryString)