2016-04-21 11 views
0

Ich versuche, ein Bild auf PHP-Server hochladen und Bild-Upload funktioniert gut. Aber ich möchte auch einige Parameter mit der Bilddatei selbst senden. Bitte helfen Sie mir mit dem folgenden Code auf Swift 2.2/iOS 9.3 für wie ich Parameter mit der Bilddatei hinzufügen soll.Bild mit Parameter in Swift hochladen 2.2

Mein PHP-Server-Code geht so:

 $info = pathinfo($_FILES['file']['name']); 

    if ($info) { 

     $imageName = md5(uniqid(rand(), true)); 

     $imageSize = getimagesize($_FILES['file']['tmp_name']); 
     if ($imageSize === FALSE) { 
      $newname = "default.jpg"; 
     } 
     else { 
      $ext = $info['extension']; // get the extension of the file 
      $newname = $imageName.".".$ext; 
     } 
     $target = './images/'.$newname;  
if (move_uploaded_file($_FILES["file"]["tmp_name"], $target)) 
{ 
      sendResponse(200, 'SUCCESS_IMAGE'); 
      return true; 
} 

Swift Code geht so:

func UploadRequest() 
{ 
    let url = NSURL(string: "http://www.themostplayed.com/rest/upload.php") 

    let request = NSMutableURLRequest(URL: url!) 
    request.HTTPMethod = "POST" 

    let boundary = generateBoundaryString() 


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

    if (image.image == nil) 
    { 
     return 
    } 

    let image_data = UIImagePNGRepresentation(image.image!) 


    if(image_data == nil) 
    { 
     return 
    } 


    let body = NSMutableData() 

    let fname = "test.png" 
    let mimetype = "image/png" 




    body.appendData("--\(boundary)\r\n".dataUsingEncoding(NSUTF8StringEncoding)!) 
    body.appendData("Content-Disposition:form-data; name=\"test\"\r\n\r\n".dataUsingEncoding(NSUTF8StringEncoding)!) 
    body.appendData("hi\r\n".dataUsingEncoding(NSUTF8StringEncoding)!) 



    body.appendData("--\(boundary)\r\n".dataUsingEncoding(NSUTF8StringEncoding)!) 
    body.appendData("Content-Disposition:form-data; name=\"file\"; filename=\"\(fname)\"\r\n".dataUsingEncoding(NSUTF8StringEncoding)!) 
    body.appendData("Content-Type: \(mimetype)\r\n\r\n".dataUsingEncoding(NSUTF8StringEncoding)!) 
    body.appendData(image_data!) 
    body.appendData("\r\n".dataUsingEncoding(NSUTF8StringEncoding)!) 


    body.appendData("--\(boundary)--\r\n".dataUsingEncoding(NSUTF8StringEncoding)!) 



    request.HTTPBody = body 



    let session = NSURLSession.sharedSession() 


    let task = session.dataTaskWithRequest(request) { 
     (
     let data, let response, let error) in 

     guard let _:NSData = data, let _:NSURLResponse = response where error == nil else { 
      print("error") 
      return 
     } 

     let dataString = NSString(data: data!, encoding: NSUTF8StringEncoding) 

     print(dataString) 

    } 

    task.resume() 


} 


func generateBoundaryString() -> String 
{ 
    return "Boundary-\(NSUUID().UUIDString)" 
} 

Antwort

1

Sie können Ihnen Alamofire verwenden Sie das Bild mit dem Parameter zu laden, für weitere Informationen bitte den unten stehenden Code finden .

func UploadRequest() { 

    var parameters = [String:AnyObject]()//define parameter according to your requirement 
    parameters = ["imageName":"Sample"] 

    let URL = "http://www.themostplayed.com/rest/upload.php" 
    let image = UIImage(named: "image.png") 

    Alamofire.upload(.POST, URL, multipartFormData: { 
    multipartFormData in 

    if let imageData = UIImageJPEGRepresentation(image, 0.6) { 
     multipartFormData.appendBodyPart(data: imageData, name: "image", fileName: "file.png", mimeType: "image/png") 
    } 

    for (key, value) in parameters { 
     multipartFormData.appendBodyPart(data: value.dataUsingEncoding(NSUTF8StringEncoding)!, name: key) 
    } 

    }, encodingCompletion: { 
     encodingResult in 

    switch encodingResult { 

    case .Success(let upload, _, _): 
     print("success") 

     upload.responseJSON { response in 
      print(response.request) // original URL request 
      print(response.response) // URL response 
      print(response.data)  // server data 
      print(response.result) // result of response serialization 

     if let JSON = response.result.value { 
      print("JSON: \(JSON)") 
     } 
     } 

    case .Failure(let encodingError): 
     print(encodingError) 
    } 
    }) 
} 

Sie können die Richtlinien- und API-Informationen von Alamofire unter folgendem Link überprüfen.

URL: https://github.com/Alamofire/Alamofire

Hoffnung es für Sie arbeitet.

+0

Vielen Dank für die Hilfe, sind Sie sicher, dass die Alamofire-Bibliothek nicht gegen die Apple-Richtlinien verstößt. Mein Bildupload-Code funktioniert auch jetzt noch gut, ich möchte nur die Parameter hinzufügen. Ich denke, wenn wir es mit meinem bestehenden Code machen können, wäre das hervorragend !! –

+0

Ja, es verstößt nicht gegen eine der Apple Richtlinien. Es ist auch weit verbreitet für die Durchführung der Web-Service-Aufgabe. Wie vor dieser Bibliothek hatte ich den gleichen Code verwendet, den Sie für das Hochladen des Bildes geteilt hatten, aber jetzt benutze ich Alamofire API dafür. –