Ошибка загрузки параметра при быстрой загрузке изображения
Я пытаюсь загрузить изображение на сервер с некоторыми подробностями, но продолжаю получать сообщение об ошибке пропущенного параметра с сервера. Это мой код загрузки изображения
func uploadImages(imageData: NSData, withParams requestDict:NSDictionary, callBack:(responseDict: NSDictionary?, error: NSError?) -> ())
{
print(requestDict)
let boundary = generateBoundaryString()
let url:NSURL = NSURL(string: String(format: "%@%@", BASE_URL, IMAGE_UPLOAD_API))!
let request = NSMutableURLRequest(URL: url)
request.HTTPMethod = "POST"
request.timeoutInterval = FLOAT_CONSTANT_60
request.setValue("multipart/form-data; boundary=\(boundary)", forHTTPHeaderField: "Content-Type")
request.HTTPBody = createBodyWithParameters(requestDict as? [String : String], filePathKey: "image", imageData: imageData, boundary: boundary)
print(requestDict)
NSURLConnection.sendAsynchronousRequest(request, queue: NSOperationQueue.mainQueue(), completionHandler:{ (response: NSURLResponse?, data: NSData?, error: NSError?) in
do {
let JSON = try! NSJSONSerialization.JSONObjectWithData(data!, options:NSJSONReadingOptions.AllowFragments)
guard let JSONDictionary :NSDictionary = JSON as? NSDictionary else {
print("Not a Dictionary")
//get your JSONData here from dictionary.
return
}
callBack(responseDict: JSON as? NSDictionary, error: nil)
print("JSONDictionary! \(JSONDictionary)")
}
catch let JSONError as NSError {
print("\(JSONError)")
callBack(responseDict: nil, error: JSONError)
}
})
}
func createBodyWithParameters(parameters: [String: String]?, filePathKey: String?, imageData: NSData, boundary: String) -> NSData {
let body = NSMutableData()
if parameters != nil {
for (key, value) in parameters! {
body.appendString("--\(boundary)\r\n")
body.appendString("Content-Disposition: form-data; name=\"\(key)\"\r\n\r\n")
body.appendString("\(value)\r\n")
}
}
let filename = "MyImage.jpg"
let mimetype = "image/jpg"
body.appendString("--\(boundary)\r\n")
body.appendString("Content-Disposition: form-data; name=\"\(filePathKey!)\"; filename=\"\(filename)\"\r\n")
body.appendString("Content-Type: \(mimetype)\r\n\r\n")
body.appendData(imageData)
body.appendString("\r\n")
body.appendString("--\(boundary)--\r\n")
return body
}
/// Create boundary string for multipart/form-data request
func generateBoundaryString() -> String {
return "Boundary-\(NSUUID().UUIDString)"
}
Это мой сервер api формат
"{
'deviceId' : 1234567,
'role' : 'admin',
'authToken' : 'cf01ebcd5844fde166940b06fbb267ba',
'userId' : 90490,
'appointmentId': 25067187,
'position' : 2,
'image' : ''
}"
И это то, что печатает ответ в методе uploadImages
{
appointmentId = 25067187;
authToken = b72e4d89aa53399dd3a04f1440dec704;
deviceId = "4DF3R180-55XC-4G3C-90F8-3431537ECCAF";
position = 2;
role = admin;
userId = 90490;
}
Я полагаю, что параметр изображения является строкой filePathKey и прикрепляется в запросе, но я не могу распечатать его, чтобы увидеть запрос после прикрепления изображения. Я что-то не так делаю из-за того, что параметр изображения не добавляется?
РЕДАКТИРОВАТЬ
Вот как я называю метод
func imagePickerController(picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : AnyObject]){
dispatch_async(dispatch_get_main_queue(),{
let selectedImage = info[UIImagePickerControllerOriginalImage] as? UIImage
let imageData = UIImageJPEGRepresentation(selectedImage!, 1)
let apiHandler = APIHandler()
apiHandler.uploadImages(imageData!, withParams: self.createImageUploadDict(), callBack: { (responseDict, error) -> () in
print(responseDict)
})
})
self.dismissViewControllerAnimated(true, completion: nil)
}
1 ответ
Я выяснил проблему, в коде не было ничего плохого, при создании словаря запросов я фактически использовал [String: AnyObject], но здесь я использовал [String:String], поэтому я получил ошибку отсутствия параметра.