将 Base64 编码的图像上传到 PHP 服务器
Uploading a Base64 encoded Image to PHP server
我正在尝试将 Base64 编码的 .PNG 文件从 Android 应用程序上传到 PHP 服务器。
下面的代码在响应中 return 没有任何内容。我做错了什么?
我正在发送 Base64 编码的字符串和文件名。 (例如:"sign1234.png")
<?php
if(isset($_POST['image']) && isset($_POST['name']){
$image = $_POST['image'];
$name = $_POST['name'];
$png = base64_to_jpeg($image,$name);
$target = 'uploads/'.$name;
$result = move_uploaded_file( $_FILES['$png']['tmp_name'], $target);
if($result){
$response["success"] = 1;
$response["message"] = "Upload Successful.";
echo json_encode($response);
}else{
$response["success"] = 0;
$response["message"] = "Server error. Could not upload.";
echo json_encode($response);
}
}
function base64_to_jpeg($base64_string, $output_file) {
$ifp = fopen($output_file, "wb");
$data = explode(',', $base64_string);
fwrite($ifp, base64_decode($data[1]));
fclose($ifp);
return $output_file;
}
?>
看来您正在尝试从 post 获取数据,但也从 $_FILES 获取图像数据,但如果我阅读您的评论正确,您只从 $_POST['image'] 和 $ 发送数据_POST['name']。我编写了一个仅使用这两个给定数据的脚本。我没有测试我的脚本,但它应该可以满足您的需求。
改变
private $save_path = 'serverpath/to/image/folder/';
到您的服务器详细信息。
代码:
<?php
class image{
private $save_path = 'serverpath/to/image/folder/';
private $image_string = '';
private $image_name = '';
private $image;
private $response = array();
public $loaded = false;
public function __construct(){
$this->response = array(
'success' => 0,
'message' => 'unknown error.'
);
$this->image_name = filter_input(INPUT_POST, 'name');
$this->image_string = filter_input(INPUT_POST, 'image');
if(!empty($this->image_name) && !empty($this->image_string)){
$this->loaded = true;
}
}
public function save(){
if(!empty($this->image_name) && !empty($this->image_string)){
return $this->progress();
}
else{
$this->response['message'] = 'Error. Not all required infor is given.';
return $this->response;
}
}
private function progress(){
$imgarr = explode(',', $this->image_string);
if(!isset($imgarr[1])){
$this->response['message'] = 'Error on post data image. String is not the expected string.';
return $this->response;
}
$this->image = base64_decode($imgarr[1]);
if(!is_null($this->image)){
$file = $this->save_path . $this->image_name;
if(file_exists($file)){
$this->response['message'] = 'Image already exists on server.';
return $this->response;
}
if(file_put_contents($file, $this->image) !== false){
$this->response['error'] = 1;
$this->response['message'] = 'Image saved to server';
return $this->response;
}
else{
$this->response['message'] = 'Error writing file to disk';
return $this->response;
}
}
else{
$this->response['message'] = 'Error decoding base64 string.';
return $this->response;
}
}
}
$img = new image();
if($img->loaded){
$result = $img->save();
echo json_encode($result);
}
else{
$result = array(
'success' => 0,
'message' => 'Not all post data given'
);
echo json_encode($result);
}
我正在尝试将 Base64 编码的 .PNG 文件从 Android 应用程序上传到 PHP 服务器。
下面的代码在响应中 return 没有任何内容。我做错了什么?
我正在发送 Base64 编码的字符串和文件名。 (例如:"sign1234.png")
<?php
if(isset($_POST['image']) && isset($_POST['name']){
$image = $_POST['image'];
$name = $_POST['name'];
$png = base64_to_jpeg($image,$name);
$target = 'uploads/'.$name;
$result = move_uploaded_file( $_FILES['$png']['tmp_name'], $target);
if($result){
$response["success"] = 1;
$response["message"] = "Upload Successful.";
echo json_encode($response);
}else{
$response["success"] = 0;
$response["message"] = "Server error. Could not upload.";
echo json_encode($response);
}
}
function base64_to_jpeg($base64_string, $output_file) {
$ifp = fopen($output_file, "wb");
$data = explode(',', $base64_string);
fwrite($ifp, base64_decode($data[1]));
fclose($ifp);
return $output_file;
}
?>
看来您正在尝试从 post 获取数据,但也从 $_FILES 获取图像数据,但如果我阅读您的评论正确,您只从 $_POST['image'] 和 $ 发送数据_POST['name']。我编写了一个仅使用这两个给定数据的脚本。我没有测试我的脚本,但它应该可以满足您的需求。
改变
private $save_path = 'serverpath/to/image/folder/';
到您的服务器详细信息。
代码:
<?php
class image{
private $save_path = 'serverpath/to/image/folder/';
private $image_string = '';
private $image_name = '';
private $image;
private $response = array();
public $loaded = false;
public function __construct(){
$this->response = array(
'success' => 0,
'message' => 'unknown error.'
);
$this->image_name = filter_input(INPUT_POST, 'name');
$this->image_string = filter_input(INPUT_POST, 'image');
if(!empty($this->image_name) && !empty($this->image_string)){
$this->loaded = true;
}
}
public function save(){
if(!empty($this->image_name) && !empty($this->image_string)){
return $this->progress();
}
else{
$this->response['message'] = 'Error. Not all required infor is given.';
return $this->response;
}
}
private function progress(){
$imgarr = explode(',', $this->image_string);
if(!isset($imgarr[1])){
$this->response['message'] = 'Error on post data image. String is not the expected string.';
return $this->response;
}
$this->image = base64_decode($imgarr[1]);
if(!is_null($this->image)){
$file = $this->save_path . $this->image_name;
if(file_exists($file)){
$this->response['message'] = 'Image already exists on server.';
return $this->response;
}
if(file_put_contents($file, $this->image) !== false){
$this->response['error'] = 1;
$this->response['message'] = 'Image saved to server';
return $this->response;
}
else{
$this->response['message'] = 'Error writing file to disk';
return $this->response;
}
}
else{
$this->response['message'] = 'Error decoding base64 string.';
return $this->response;
}
}
}
$img = new image();
if($img->loaded){
$result = $img->save();
echo json_encode($result);
}
else{
$result = array(
'success' => 0,
'message' => 'Not all post data given'
);
echo json_encode($result);
}