2016-06-25 1 views
0

У меня возникли проблемы с отправкой текста и изображений в тот же почтовый запрос на мой сервер. Я думаю, что проблема связана с тем, как я установил свою границу.Неисправность с запросом на отправку multipart/form-data NSURLSession

Im использование быстро с ios9.

Я следовал инструкции здесь ios Upload Image and Text using HTTP POST делает все возможное, чтобы превратить Obj-C в быстрой

однако, когда я отправить запрос на мой сервер, всякий раз, когда я пытаюсь получить доступ к сообщению данные, такие как [ключ $ _POST " "] я получаю неопределенную ошибку индекса. Вот код, я использую для настройки запроса HTTP, может кто-нибудь обнаружить ошибку:

func sendRegisterRequest(params:Dictionary<String, String>, withImage image: UIImage) { 

    // https://stackoverflow.com/questions/8564833/ios-upload-image-and-text-using-http-post 
    let url = NSURL(string: "MY_URL"); 
    let request = NSMutableURLRequest(URL: url!) 
    // the boundary string : a random string, that will not repeat in post data, to separate post data fields. 
    let boundaryConstant = "----------V2ymHFg03ehbqgZCaKO6jy--"; 

    // string constant for the post parameter 'file'. My server uses this name: `file`. Your's may differ 
    let fileParamConstant = "file"; 

    request.HTTPMethod = "POST" 
    request.setValue("multipart/form-data; boundary=\(boundaryConstant)", forHTTPHeaderField: "Content-Type") 


    // post body 
    let body = NSMutableData(); 



    // add params (all params are strings) 
    for (key, value) in params { 
     body.appendData("\(boundaryConstant)\r\n".dataUsingEncoding(NSUTF8StringEncoding)!); 
     body.appendData("Content-Disposition: form-data; name=\"\(key.stringByAddingPercentEncodingWithAllowedCharacters(.symbolCharacterSet())!)\"\r\n\r\n".dataUsingEncoding(NSUTF8StringEncoding)!); 
     body.appendData("\(value.stringByAddingPercentEncodingWithAllowedCharacters(.symbolCharacterSet())!)\r\n".dataUsingEncoding(NSUTF8StringEncoding)!); 
    } 

    //print(body); 
    // add image data 
    let imageData = UIImageJPEGRepresentation(image, 1.0); 

    body.appendData("\(boundaryConstant)\r\n".dataUsingEncoding(NSUTF8StringEncoding)!); 
    body.appendData("Content-Disposition: form-data; name=\"\(fileParamConstant)\"; filename=\"image\"\r\n".dataUsingEncoding(NSUTF8StringEncoding)!); 
    body.appendData("Content-Type: image/jpeg\r\n\r\n".dataUsingEncoding(NSUTF8StringEncoding)!); 
    body.appendData(imageData!); 
    body.appendData("\r\n".dataUsingEncoding(NSUTF8StringEncoding)!); 
    body.appendData("\(boundaryConstant)\r\n".dataUsingEncoding(NSUTF8StringEncoding)!); 

    request.HTTPBody = body; 
+0

вы можете проверить этот ответ http://stackoverflow.com/questions/26162616/upload-image-with-parameters-in-swift/26163136 # 26163136 –

ответ

1

При использовании многокомпонентных данных формы, вы должны префиксом границы с дополнительными двумя дефисами в пределах данных тела, и вы должны также добавьте два дефиса в конце последней границы. Так что если у вас есть:

boundary=foo 

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

--foo 
field 1 info 
--foo 
field 2 info 
--foo-- 

См также What is the '-' in multipart/form-data?

+0

Спасибо, я исправил это и теперь он работает правильно. Мне также пришлось удалить 'stringByAddingPercentEncodingWithAllowedCharacters (.symbolCharacterSet())'. –