2016-01-28 9 views
7

W tej chwili przesyłam tylko jeden obraz do serwera po skrypcie po stronie serwera za pomocą kodu podanego poniżej. Teraz mam tablicę UIImage, chcę wiedzieć, jak mogę użyć UIImageJPEGRepresentation(myImageView.image!, 0.1), aby opublikować wszystkie obrazy w tablicy UIImageView?Przesyłanie wielu obrazów z innymi parametrami w Swift

func uploadImage() 
{ 
    let postPictureUrl = NSURL(string: "http://www.23look.com/merchant/verify") 
    let request = NSMutableURLRequest(URL: postPictureUrl!) 
    request.HTTPMethod="POST" 

    let param=[ 
     "mer_name" : shopNameUITF.text!, 
     "mer_tel" : shopTelephoneUITF.text!, 
     "mer_address" : shopAddressUITF.text!, 
     "lat" : "39.6892", 
     "lng" : "115.9239", 
     "token": KeychainWrapper.stringForKey("tokenValue")!, 
     "mer_type": "smalll" 
    ] 

    let abc = KeychainWrapper.stringForKey("tokenValue")! 

    let boundary = generateBoundaryString() 

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

    let imageData = UIImageJPEGRepresentation(myImageView.image!, 0.1) 

    if imageData==nil { print("image data is nil"); return } 

    request.HTTPBody = createBodyWithParameters(param, filePathKey: "mer_license", imageDataKey: imageData!, boundary: boundary) 

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

     if error != nil { 
      print("error=\(error)") 
      return 
     } 

     //You can print out response object 
     print("***** response = \(response)") 

     // Print out reponse body 
     let responseString = NSString(data: data!, encoding: NSUTF8StringEncoding) 
     print("**** response data = \(responseString!)") 

     do { 

      let json = try NSJSONSerialization.JSONObjectWithData(data!, options: .MutableContainers) as? NSDictionary 

      dispatch_async(dispatch_get_main_queue(), { 
       print(NSString(data: data!, encoding:NSUTF8StringEncoding)!) 
       print(json) 
      }) 

     } catch let err { 
      print(err) 
     } 
    } 
    task.resume() 
} 

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

func createBodyWithParameters(parameters:[String:String]?, filePathKey: String?, imageDataKey:NSData, boundary: String) -> NSData { 

    var 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 = "user-profile.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(imageDataKey) 
    body.appendString("\r\n") 

    body.appendString("-\(boundary)-\r\n") 

    return body 
} 

Zajmuje następujące parametry:

mer_name - String

mer_tel - String

mer_address - ciąg

LNG - ciąg

lat - ciąg

mer_licence - typ pliku (To gdzie moje zdjęcia zostaną załadowane)

żeton - ciąg

mer_type - ciąg

+0

Jaki rodzaj parametru serwer mógł odbierać? dane 1.One bez nazwy2. Wiele danych o innej nazwie3. Tablica danych. – Lumialxk

+0

Wiele danych o różnych nazwach: mer_name (String), mer_tel (String), mer_address (String), long (string), lat (string), mer_licence (typ pliku), token (string), mer_type (string) – laser2302

Odpowiedz

13

Należy dokonać zmian w createBodyWithParameters jak poniżej ....... ..

Kiedy masz kilka zdjęć ...

func createBodyWithParameters(parameters: NSMutableDictionary?,boundary: String) -> NSData { 
    let body = NSMutableData() 

    if parameters != nil { 
     for (key, value) in parameters! { 

      if(value is String || value is NSString){ 
       body.appendString("--\(boundary)\r\n") 
       body.appendString("Content-Disposition: form-data; name=\"\(key)\"\r\n\r\n") 
       body.appendString("\(value)\r\n") 
      } 
      else if(value is [UIImage]){ 
       var i = 0; 
       for image in value as! [UIImage]{ 
        let filename = "image\(i).jpg" 
        let data = UIImageJPEGRepresentation(image,1); 
        let mimetype = mimeTypeForPath(filename) 

        body.appendString("--\(boundary)\r\n") 
        body.appendString("Content-Disposition: form-data; name=\"\(key)\"; filename=\"\(filename)\"\r\n") 
        body.appendString("Content-Type: \(mimetype)\r\n\r\n") 
        body.appendData(data!) 
        body.appendString("\r\n") 
        i++; 
       } 


      } 
     } 
    } 
    body.appendString("--\(boundary)--\r\n") 
    //  NSLog("data %@",NSString(data: body, encoding: NSUTF8StringEncoding)!); 
    return body 
} 

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

} 

func mimeTypeForPath(path: String) -> String { 
    let pathExtension = path.pathExtension 
    var stringMimeType = "application/octet-stream"; 
    if let uti = UTTypeCreatePreferredIdentifierForTag(kUTTagClassFilenameExtension, pathExtension!, nil)?.takeRetainedValue() { 
     if let mimetype = UTTypeCopyPreferredTagWithClass(uti, kUTTagClassMIMEType)?.takeRetainedValue() { 
      stringMimeType = mimetype as NSString as String 
     } 
    } 
    return stringMimeType; 
} 



func createRequest (param : NSMutableDictionary , strURL : String) -> NSURLRequest { 

    let boundary = generateBoundaryString() 

    let url = NSURL(string: strURL) 
    let request = NSMutableURLRequest(URL: url!) 

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

    return request 
} 
+0

Dzięki! Ale mam wiele obrazów, tzn. Var licenseImages = [UIImage](). Moje obrazy są przechowywane w tej tablicy, w jaki sposób mogę uzyskać obrazy z tej tablicy i opublikować je wraz z innymi parametrami łańcucha? – laser2302

+0

Próbowałem, ale jest napisane "Dziękuję za informację zwrotną!" Kiedy zdobędziesz w sumie 15 punktów reputacji, twoje głosy zmienią publicznie wyświetlany wynik postu. " Kiedy dostanę 15 reputacji, wrócę i zobaczę, czy mogę głosować na twoją odpowiedź. Jestem całkiem nowy w tym. – laser2302

+0

@Bhoomi HI, robię to samo, ale dostaję błąd w odpowiedzi. Czy możesz proszę sprawdzić? http://stackoverflow.com/questions/37292632/swift-upload-multiple-images-to-server –

Powiązane problemy