Swift POST 请求(base64 image)到 PHP 脚本



在阅读了许多类似的问题后,我仍然不明白这里的问题是什么。

我正在尝试将 Base64 编码的图像发送到一个简单的 PHP 脚本,这是我的 Swift 代码:

func sendImage(encodedImage: String) {
let url = URL(string: "http://www.site.whatever/image_upload.php")
var request = URLRequest(url: url!)
let postString = "encoded_image=(encodedImage)"
let postData = postString.data(using: String.Encoding.utf8)
request.httpMethod = "POST"
request.httpBody = postData
request.setValue("application/x-www-form-urlencoded", forHTTPHeaderField: "Content-Type")
let task = URLSession.shared.dataTask(with: request) {
data, response, error in
if error != nil {
// Handle error
return
}
let responseString = NSString(data: data!, encoding: String.Encoding.utf8.rawValue)
print(responseString)
}
task.resume()
}

简单的 PHP 脚本

$request_method = $_SERVER["REQUEST_METHOD"];
switch ($request_method) {
case 'POST':
if (isset($_POST["encoded_image"])) {
// POST parameter has been set successfully
$return = ["POSTSET?" => "Yes"];
echo json_encode($return);
}
// POST parameter was not set
$return = ["POSTSET" => "No"];
echo json_encode($return);
}

问题:

let postString = "encoded_image=\(encodedImage(">

其中 encodedImage 设置为:

let encodedImage = image.pngData((!.base64EncodedString((

它返回{"POSTSET?","No"}//POST 未发送

让 postString = "encoded_image=some_random_string">

它返回{"POSTSET?","Yes"}//POST 发送成功


我不知道为什么它完美运行,直到我尝试发送 Base64。

思潮:

request.setValue("application/x-www-form-urlencoded", forHTTPHeaderField: "Content-Type")是正确的内容类型吗?

由于 Base64 字符串太长,我应该设置内容长度吗?

request.httpBody应该使用String.Encoding.utf8以外的其他东西进行编码吗?

我的 PHP 是否应该期待与 Swift 发送的内容不同的东西?

任何见解都会有所帮助,谢谢。

我看到的 Base64 编码 PNG 的字符串长度平均约为 1200 万个字符。运行 PHP 脚本的服务器无法接受请求,并会导致错误。

我向 API 发送了一个 JPG,像这样发送时,Base64 字符串接近 300 万。

let image = info[UIImagePickerController.InfoKey.originalImage] as! UIImage
let imageData = image.jpegData(compressionQuality: 1)!
let encodedImage = imageData.base64EncodedString()

这成功地发送了图像,允许我在后端解码和保存。

最新更新