gpt4 book ai didi

php - 发送到服务器时 Base64 不完整

转载 作者:行者123 更新时间:2023-11-30 10:05:30 24 4
gpt4 key购买 nike

我正在尝试将图像发送到服务器,但图像应该是 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!))&current_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());
}

?>

最佳答案

我认为这个问题已在评论中解决,但这里有一个回顾:

在 varchar(255) 字段中插入太长的 Base64 字符串(可变长度?)会导致数据丢失。据我所知,增加领域的规模解决了眼前的问题。我使用术语“立即”,因为正如 @YvesLeBorg 在评论中指出的那样,如果后端没有输入大小限制,这肯定会在某个时候失败。

此外,我无法忽视 PHP/SQL 代码对注入(inject)完全开放的事实。

$mst_customer = trim($_POST['mst_customer']); 传递给 "INSERT INTO Ticket_items SET mst_customer = '$mst_customer' ,然后通过 mysql_query($sql) or die(mysql_error()); 很危险!

任何人都可以在 $_POST 参数中写入任何内容,SQL 会很乐意接受它。准备好的语句、PDO、输入清理等的存在是有原因的。

最后,还有一个关于 Base64 数据中 + 符号消失的问题。这是缺少 url encoding 的结果发布数据。

我认为这就是总结。

关于php - 发送到服务器时 Base64 不完整,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36286326/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com