【发布时间】:2013-08-31 23:38:09
【问题描述】:
正如描述所说,我正在 Android 中拍照。它被压缩并添加到byte[],然后添加到base64encoded。它使用 JSON 发送到我的 Web 服务,“应该”在该服务中对其进行解码并保存在 SQL 表行中。我可以将编码的字符串保存在单独的行中,这样我就知道它已经到了。
谁能看看这个并告诉我我哪里做错了? *对不起,冗长的代码。如果有人提供帮助,我不想错过任何事情!
安卓端
@Override
protected String doInBackground(String... args) {
// TODO Auto-generated method stub
// Check for success tag
int success;
stream = new ByteArrayOutputStream();
picture.compress(Bitmap.CompressFormat.JPEG, 50, stream);
image = stream.toByteArray();
String ba1 = Base64.encodeToString(image, Base64.DEFAULT);
SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(MainScreen.this);
String post_username = sp.getString("username", "anon");
try {
ArrayList<NameValuePair> params = new ArrayList<NameValuePair>();
params.add(new BasicNameValuePair("username", post_username));
params.add(new BasicNameValuePair("picture", ba1));
JSONObject json = jsonParser.makeHttpRequest(POST_COMMENT_URL,
"POST", params);
success = json.getInt(TAG_SUCCESS);
if (success == 1) {
Log.d("Picture Added!", json.toString());
//finish();
return json.getString(TAG_MESSAGE);
} else {
Log.d("Upload Failure!", json.getString(TAG_MESSAGE));
return json.getString(TAG_MESSAGE);
}
} catch (JSONException e) {
e.printStackTrace();
}
return null;
}
protected void onPostExecute(String file_url) {
// dismiss the dialog once product deleted
pDialog.dismiss();
if (file_url != null) {
Toast.makeText(MainScreen.this, file_url, Toast.LENGTH_LONG)
.show();
}
}
}
}
PHP 端
<?php
require("config.inc.php");
if (!empty($_POST)) {
$user = $_POST['username'];
$data = $_POST['picture'];
$data = base64_decode($data);
$im = imagecreatefromstring($data);
header('Content-Type: image/jpeg', true);
ob_start();
imagejpeg($im);
$imagevariable = ob_get_contents();
ob_end_clean();
$query = "INSERT INTO pictures ( username, photo, rawdata ) VALUES ( :user, :photo, :raw ) ";
$query_params = array(
':user' => $user,
':photo' => $imagevariable,
':raw' => $_POST['picture']
);
try {
$stmt = $db->prepare($query);
$result = $stmt->execute($query_params);
}
catch (PDOException $ex) {
$response["success"] = 0;
$response["message"] = "Database Error. Couldn't add post!";
die(json_encode($response));
}
$response["success"] = 1;
$response["message"] = "Picture Successfully Added!";
echo json_encode($response);
} else {
}
?>
【问题讨论】:
-
rawdata在 MySQL 中设置的值是什么类型? Blob 还是别的什么? -
我正在使用 rawdata 来确认它正在从应用程序一直到数据库。 rawdata 只是一个文本行并存储了 base64 数据。在我可以解码和存储图像之后,我就不需要它了。这只是为了测试。
-
如果有人能引导我完成它,我也会很高兴使用多方。我认为弄清楚如何解码这个 base64 会更容易。
-
只要确保如果您在实时环境中使用它,它非常非常不安全,并且基本上所有内容都可以注入到图像字符串的 base64 版本中。
标签: php android sql json base64