2016-12-08 7 views
4

Я хочу отправить изображение как параметр вместе с моей просьбой. Я использовал код ниже для вызова моего запроса POST, но я не знаю, как добавить изображение в тело.Загрузить изображение на сервер - Swift 3

Я получаю изображение с помощью палитры изображения следующим образом:

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. Я видел это через multipart/form-data, но не смог реализовать его сам. Я не хочу кодировать его в базовом 64 формате. Пожалуйста, помогите мне в этом.

+0

Пожалуйста, перейдите по этой ссылке http://stackoverflow.com/questions/16434537/пост-изображение-сервер-в-Iphone. –

+0

Convert 'Image' base64 строка. https://gist.github.com/brocoo/6e7466f3138b2e5763ef. Используйте реализацию, а не файл. –

+0

Я не хочу конвертировать его в формат base 64. Я хочу использовать его напрямую – Mamta

ответ

13

Я использую следующую структуру для отправки изображений:

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!) 
} 

Затем в функции вы создаете тело, как это:

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

Что мне нужно передать в этом: filePathKey: yourKey? Это ключ API? – Mamta

+0

@Dia Точно, ключ API для параметра изображения – Elena

+0

Хорошо. Мое изображение выбирается из imagepicker. так как я могу переделать эту строку: let defFileName = "yourImageName.jpg"? – Mamta

Смежные вопросы