サーバーにイメージを送信しようとしていますが、イメージはBase64形式である必要があります。私はそれを送信するには、この機能を使用しています:サーバーへの送信時にBase64が不完全です
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)
}
sig
変数は、私は、文字列が正しいことを確認することができますので、それは私のコンソールに印刷されている、Base64文字列を保持しています。私はpostStringも印刷しています。また、検査の結果、署名がBase64文字列と一致していることも間違いありません。しかし、phpmyadminを開くと、不完全なBase64文字列を持つ画像のフィールドが表示されます。おそらく1/4はちょうどそこにあります。
ここに私のPHPコードは、あなたがそれを見たい場合には、です:
<?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());
}
?>
サーバ側では、本体が正しく 'travelled'($ echo、print、log)$ signatureを期待どおりに見ているかどうかを調べてみてください。はいの場合は、テーブルスキーマで可変長テキストフィールド(b64)に対応できることを確認してください。 – YvesLeBorg
@ YvesLeBorg私のフィールドは 'varchar(255)'です - おそらくこれが原因ですか?代わりにどの程度のサイズを入れるべきですか? –
私はSwiftを知らず、あなたのコードを読まなかったが、私は単に質問しなければならない。あなたのBase64をエンコードするURLはありますか?文字列は '+'、 '='、 '/'で区切られますか?あなたのbase64文字列が常に同じ長さにカットされている場合は、私の質問を無視して、文字列を保持するには小さすぎるかもしれないデータベースフィールドを探します。 – jDo