Android 将图像保存到 PHP 服务器
Android save image to PHP server
基本上我正在尝试 post 用户选择的图像到我的服务器并将其保存在那里。
PHP 文件:
<?php
require_once __DIR__ . '/includes/functions.php';
require_once __DIR__ . '/includes/config.php';
$image = $_POST["avatar"];
$user_id = $_POST["user_id"];
$files = glob('avatars/*.jpg');
$name = count($files) + 1;
$decodedImage = base64_decode($image);
file_put_contents("avatars/" . $name . ".jpg", $decodedImage);
?>
Android
private class UploadFileToServer extends AsyncTask<Bitmap, Void, Void> {
@Override
protected Void doInBackground(Bitmap... params) {
Bitmap bitmap = params[0];
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, byteArrayOutputStream);
byte[] byteArray = byteArrayOutputStream .toByteArray();
String base64avatar = Base64.encodeToString(byteArray, Base64.DEFAULT);
String dataString = "user_id=" + userID + "&avatar=" + base64avatar;
try {
URL url = new URL(URL_OMITTED);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("POST");
conn.setDoOutput(true);
DataOutputStream os = new DataOutputStream(conn.getOutputStream());
os.writeBytes(dataString);
os.flush();
os.close();
Log.d("Response code",conn.getResponseCode() + "");
conn.disconnect();
} catch(IOException e) {
e.printStackTrace();
}
return null;
}
}
在服务器上创建了一个文件,但它不可读。当我奇怪地将压缩格式设置为 PNG 时,创建了一个可读文件,但它已损坏,因此它大部分是黑色而不是上传的图像。
事实证明 base64 不是 URL_SAFE。
通过更改 Base64.Default to Base64.URL_SAFE
并添加
$image = str_replace(array('-', '_'), array('+', '/'), $image);
到 php 文件解码 URL_SAFE 字符串。
我确定这可能不是解决问题的方法,但它确实有效。
基本上我正在尝试 post 用户选择的图像到我的服务器并将其保存在那里。
PHP 文件:
<?php
require_once __DIR__ . '/includes/functions.php';
require_once __DIR__ . '/includes/config.php';
$image = $_POST["avatar"];
$user_id = $_POST["user_id"];
$files = glob('avatars/*.jpg');
$name = count($files) + 1;
$decodedImage = base64_decode($image);
file_put_contents("avatars/" . $name . ".jpg", $decodedImage);
?>
Android
private class UploadFileToServer extends AsyncTask<Bitmap, Void, Void> {
@Override
protected Void doInBackground(Bitmap... params) {
Bitmap bitmap = params[0];
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, byteArrayOutputStream);
byte[] byteArray = byteArrayOutputStream .toByteArray();
String base64avatar = Base64.encodeToString(byteArray, Base64.DEFAULT);
String dataString = "user_id=" + userID + "&avatar=" + base64avatar;
try {
URL url = new URL(URL_OMITTED);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("POST");
conn.setDoOutput(true);
DataOutputStream os = new DataOutputStream(conn.getOutputStream());
os.writeBytes(dataString);
os.flush();
os.close();
Log.d("Response code",conn.getResponseCode() + "");
conn.disconnect();
} catch(IOException e) {
e.printStackTrace();
}
return null;
}
}
在服务器上创建了一个文件,但它不可读。当我奇怪地将压缩格式设置为 PNG 时,创建了一个可读文件,但它已损坏,因此它大部分是黑色而不是上传的图像。
事实证明 base64 不是 URL_SAFE。
通过更改 Base64.Default to Base64.URL_SAFE
并添加
$image = str_replace(array('-', '_'), array('+', '/'), $image);
到 php 文件解码 URL_SAFE 字符串。
我确定这可能不是解决问题的方法,但它确实有效。