2016-06-25 4 views
0

Ich habe Probleme mit dem Senden von Text und Bildern in der gleichen Post-Anfrage an meinen Server. Ich denke, das Problem hat damit zu tun, wie ich meine Grenze festlege.Probleme mit NSURLSession Multipart/Formulardaten Post Anfrage

Ich benutze swift mit ios9.

folgte ich Anweisungen hier ios Upload Image and Text using HTTP POST mein Bestes tun, die obj-c in schnelle

jedoch zu konvertieren, wenn ich einen Antrag auf meinen Server zu veröffentlichen, wenn ich versuche, die Post-Daten zugreifen wie $ _POST [ "key "] Ich bekomme einen undefinierten Indexfehler. Hier ist der Code i Setup verwenden, um die HTTP-Anforderung, kann jeder den Fehler erkennen:

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

Sie diese Antwort überprüfen http://stackoverflow.com/questions/26162616/upload-image-with-parameters-in-swift/26163136 # 26163136 –

Antwort

1

Wenn Sie mehrteiligen Formulardaten verwenden, müssen Sie die Grenze mit zusätzlichen zwei Bindestriche im Körper Datenpräfix, und Sie müssen Fügen Sie am Ende der letzten Grenze auch zwei Bindestriche hinzu. Also, wenn Sie haben:

boundary=foo 

dann der Körper sollte wie folgt aussehen:

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

Siehe auch What is the '-' in multipart/form-data?

+0

Danke, das habe ich korrigiert und jetzt funktioniert es richtig. Ich musste auch 'stringByAddingPercentEncodingWithAllowedCharacters (.symbolCharacterSet())' entfernen. –