2016-04-13 6 views
0

Hallo ich arbeite mit http POST Daten und Bilder, es funktioniert gut, wenn die Wi-Fi/Internet-Verbindung verfügbar ist. Aber wenn der Schalter aus dem mobilen Daten/wifi es die einige Frage zeigt, wie folgt:Auch ohne Internetverbindung wie die Daten und Bilder in Server

error=Optional(Error Domain=NSURLErrorDomain Code=-1009 "The Internet connection appears to be offline." UserInfo={NSErrorFailingURLStringKey=http://moneymonkey.tokiiyo.com/api/policy, _kCFStreamErrorCodeKey=8, NSErrorFailingURLKey=http://moneymonkey.tokiiyo.com/api/policy, NSLocalizedDescription=The Internet connection appears to be offline., _kCFStreamErrorDomainKey=12, NSUnderlyingError=0x16ef25f0 {Error Domain=kCFErrorDomainCFNetwork Code=-1009 "(null)" UserInfo={_kCFStreamErrorDomainKey=12, _kCFStreamErrorCodeKey=8}}}) 

ich den Code für HTTP-POST-Methode verwenden, sind wie folgt:

func barButtonItemClicked(barButtonItem: UIBarButtonItem) 
{ 


    let myUrl = NSURL(string: "http://moneymonkey.tokiiyo.com/api/policy"); 

    let typeItem: InsuranceType = InsuranceManager.sharedInstance.TypeArray[0] 
    //let typeItem = InsuranceManager.sharedInstance 
    let compItem = InsuranceManager.sharedInstance 

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

    let param = [ 
     "api_key" : "AiK58j67", 
     "api_secret" : "a#9rJkmbOea90-", 
     "phone" : "\(mobile)", 
     "policy_type" : "\(typeItem.name)", 
     "company" : "\(compItem.selectedCompany.cname)" 
    ] 

    print("Policy_type: \(typeItem.name)") 
    print("Company: \(compItem.selectedCompany.cname)") 
    let boundary = generateBoundaryString() 

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



    let imageData = uploadImage?.highestQualityJPEGNSData 

    if(imageData==nil) { return; } 

    request.HTTPBody = createBodyWithParameters(param, filePathKey: "file[]", 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{ 

      _ = try NSJSONSerialization.JSONObjectWithData(data!, options: .MutableContainers) as? NSDictionary 
      dispatch_async(dispatch_get_main_queue(),{ 
      }); 
     } 
     catch 
     { 

      // report error 
      print("Oops!! Something went wrong\(error)") 
     } 
    } 

    task.resume() 

    let alert = UIAlertController(title: "Message", message:"Your document was uploaded successfully to our Server.", preferredStyle: .Alert) 
    let action = UIAlertAction(title: "DONE", style: .Default) { _ in 
     // Put here any code that you would like to execute when 
     // the user taps that OK button (may be empty in your case if that's just 
     // an informative alert) 
     self.performSegueWithIdentifier("listSegue", sender: self) 
    } 
    alert.addAction(action) 
    self.presentViewController(alert, animated: true){} 

} 

func createBodyWithParameters(parameters: [String: String]?, filePathKey: String?, imageDataKey: NSData, boundary: String) -> NSData { 
    let body = NSMutableData(); 

    if parameters != nil { 
     for (key, value) in parameters! { 
      body.appendString1("--\(boundary)\r\n") 
      body.appendString1("Content-Disposition: form-data; name=\"\(key)\"\r\n\r\n") 
      body.appendString1("\(value)\r\n") 
     } 
    } 

    let filename = "upload.png" 

    let mimetype = "image/jpeg" 

    body.appendString1("--\(boundary)\r\n") 
    body.appendString1("Content-Disposition: form-data; name=\"\(filePathKey!)\"; filename=\"\(filename)\"\r\n") 
    body.appendString1("Content-Type: \(mimetype)\r\n\r\n") 
    body.appendData(imageDataKey) 
    body.appendString1("\r\n") 



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

    return body 
} 

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

extension NSMutableData { 

func appendString1(string: String) { 
    let data = string.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: true) 
    appendData(data!) 
} 
} 

Kann jemand bitte leite mich, wie man auch ohne Internetverbindung hochlädt. Vielen Dank im Voraus

+1

Du kannst nicht. Wie können Sie auch ohne Netzwerkverbindung hochladen? – rmaddy

Antwort

5

Es ist nicht möglich, Daten hochzuladen, wenn keine Internetverbindung verfügbar ist.

Sie können diese Daten jedoch in der lokalen Datenbank speichern, wenn kein Internet verfügbar ist, und Sie können diese Daten immer dann veröffentlichen, wenn eine Internetverbindung angezeigt wird. und auch aus der lokalen Datenbank entfernen, wenn Daten hochgeladen wurden.

1

Es ist nicht möglich Daten auf den Server zu übertragen Internetverbindung ist auf dem Gerät nicht verfügbar. aber Sie können die Daten lokal, zur gleichen Zeit überprüfen Sie die Erreichbarkeit in immer oder einige Zeitintervalle, wenn es erreicht, senden Sie die Daten von der lokalen Datenbank an den Server und löschen Sie das Element lokal (wenn Sie benötigen)

Verwandte Themen