Ich versuche, ein Bild an den Server zu senden, aber das Bild sollte im Base64-Format sein. Ich benutze diese Funktion, es zu senden:Unvollständige Base64 beim Senden an Server
func upload_signature_staff(ticket: NSString){
let defaults = NSUserDefaults.standardUserDefaults()
let stringOne = defaults.stringForKey(defaultsKeys.staff_id)
let stringtwo = defaults.stringForKey(defaultsKeys.mst_customer)
let sig = defaults.stringForKey("staff_signature")
let request = NSMutableURLRequest(URL: NSURL(string: "http://xxxxxxxxxxxxx/upload.php")!)
request.HTTPMethod = "POST"
let postString = "action=add_signature&mst_customer=\((stringtwo!))&ticket=\((ticket))&signature=\((sig!))¤t_user=\((stringOne!))&item_type=10"
print(postString)
request.HTTPBody = postString.dataUsingEncoding(NSUTF8StringEncoding)
let task = NSURLSession.sharedSession().dataTaskWithRequest(request) { data, response, error in
guard error == nil && data != nil else { // check for fundamental networking error
print("error=\(error)")
return
}
if let httpStatus = response as? NSHTTPURLResponse where httpStatus.statusCode != 200 { // check for http errors
print("statusCode should be 200, but is \(httpStatus.statusCode)")
print("response = \(response)")
}
let responseString = NSString(data: data!, encoding: NSUTF8StringEncoding)
print("responseString = \(responseString)")
}
task.resume()
//self.performSegueWithIdentifier("goto_main2", sender: self)
}
Die sig
Variable den Base64-String hält, wird es in meiner Konsole gedruckt wird, damit ich überprüfen kann, dass die Zeichenfolge korrekt ist. Ich drucke auch die postString und bei der Überprüfung ist es auch richtig, dass die Signatur der Base64 String entspricht. Aber wenn ich phpmyadmin öffne, sehe ich das Feld meines Bildes mit unvollständiger Base64-Zeichenfolge, vielleicht ist nur 1/4 da.
Hier ist meine PHP-Code, falls Sie es sehen:
<?php
require_once("../c.php");
$action = trim($_POST['action']);
if($action == "add_signature"){
$mst_customer = trim($_POST['mst_customer']);
$ticket = trim($_POST['ticket']);
$signature = trim($_POST['signature']);
$current_user = trim($_POST['current_user']);
$item_type = trim($_POST['item_type']);
$inputtime = time();
$sql = "INSERT INTO ticket_items SET mst_customer = '$mst_customer', ticket = '$ticket', ticket_item_type = '$item_type', details = '$signature', addedby = '$current_user', lastupdate = '$inputtime' ";
mysql_query($sql) or die(mysql_error());
}
?>
Server-Seite, versuchen Sie festzustellen, ob der Körper 'richtig' (echo, print, log) $ Unterschrift ', um zu sehen, wenn es wie Sie erwarten ist. Wenn ja, überprüfen Sie Ihr Tabellenschema, um sicherzustellen, dass es ein Textfeld mit variabler Länge aufnehmen kann (b64). – YvesLeBorg
@ YvesLeBorg mein Feld ist 'varchar (255)' - vielleicht ist das der Schuldige? Welche Größe sollte ich stattdessen setzen? –
Ich weiß Swift nicht und ich habe Ihren Code nicht gelesen, aber ich muss nur fragen ... Sind Sie für Ihre base64 kodieren? Bricht die Saite bei '+', '=' und '/'? Wenn Ihre Base64-Zeichenfolge immer auf die gleiche Länge gekürzt wird, ignorieren Sie meine Frage und suchen Sie nach Datenbankfeldern, die möglicherweise zu klein sind, um die Zeichenfolge zu speichern. – jDo