将带有 JSONObject 的 Base64 发送到服务器(ANDROID)
Send Base64 with JSONObject to server(ANDROID)
当我将图像编码为 base 64 并尝试通过 JSON.
发送时,我认为我遇到了一个奇怪的编码错误
我正在对以位图开头的照片进行编码,如下所示:
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
photo.compress(Bitmap.CompressFormat.JPEG, 100, byteArrayOutputStream);
byte[] byteArray = byteArrayOutputStream .toByteArray();
encoded = Base64.encodeToString(byteArray, Base64.DEFAULT);
然后我在 json
上发送 "encoded" 字符串
JSONObject postDataParams = new JSONObject();
postDataParams.put(ArchivoTexto, encoded);
现在我看到的问题是,当我发送 JSON 编码字符串时,控制台说它发送的内容如下所示:
\/9j\/4AAQSkZJRgABAQAAAQABAAD\/2wB
但是如果我将 "encoded" 字符串复制到剪贴板,它看起来像这样:
/9j/4AAQSkZJRgABAQAAAQABAAD/2wB
反斜杠消失了,如果我使用网站解码来自剪贴板的字符串,它会成功解码图像,但是当我通过 JSON 将字符串发送到服务器时,它看起来就坏了, 所以我怀疑是反斜杠让它坏了。
我的问题是,我应该在 JSON 上发送字符串之前寻找一种删除反斜杠的方法,还是服务器无法正确解释字符串的错误?
您正在发送编码的字符串,因为将它放入 JSONObject 不要那样做,这可能是那些反斜杠的原因。
我建议使用 Volley 将图像发送到服务器。
private void uploadImage() {
StringRequest stringRequest = new StringRequest(Request.Method.POST, URL, new Response.Listener<String>() {
@Override
public void onResponse(String response) {
//Do something with response
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
}
}
) {
@Override
protected Map<String, String> getParams() throws AuthFailureError {
HashMap<String, String> hashMap = new HashMap<>();
hashMap.put("image",imageToString(mBitmap)); //passing bitmap for converting into String
return hashMap;
}
};
mRequestQueue.addToRequestQueue(stringRequest); //mRequestQueue is from Volley
}
private String imageToString(Bitmap bitmap) {
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, byteArrayOutputStream);
byte[] imgBytes = byteArrayOutputStream.toByteArray();
return Base64.encodeToString(imgBytes, Base64.DEFAULT);
}
通过这个将位图转换为base64字符串
public static String getBase64Image(Bitmap bmp) {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
bmp.compress(Bitmap.CompressFormat.JPEG, 100, baos);
byte[] imageBytes = baos.toByteArray();
return Base64.encodeToString(imageBytes, Base64.DEFAULT);
}
并以这种方式调用并将 \n 替换为 ""
String Base64Photo = getBase64Image(decodeFile(bitmap)).replace("\n", "");
在您的 PHP 文件中执行此操作
- 从发布的数据 (base64) 中创建一个 Json 字符串,并删除“\n”字符(以避免该字符)
- 解码 JSON 字符串以删除 JSON 字符
- 获取解码后的字符串
这对我有用
$img_base64 = $_POST['ArchivoTexto'];
$sdata = '{"val" : "'.sub_str("\n","",$img_base64).'"}';
$ddata = json_decode($sdata);
$jdata = $ddata->val;//$jdata contain the clear base64 String
当我将图像编码为 base 64 并尝试通过 JSON.
发送时,我认为我遇到了一个奇怪的编码错误我正在对以位图开头的照片进行编码,如下所示:
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
photo.compress(Bitmap.CompressFormat.JPEG, 100, byteArrayOutputStream);
byte[] byteArray = byteArrayOutputStream .toByteArray();
encoded = Base64.encodeToString(byteArray, Base64.DEFAULT);
然后我在 json
上发送 "encoded" 字符串 JSONObject postDataParams = new JSONObject();
postDataParams.put(ArchivoTexto, encoded);
现在我看到的问题是,当我发送 JSON 编码字符串时,控制台说它发送的内容如下所示:
\/9j\/4AAQSkZJRgABAQAAAQABAAD\/2wB
但是如果我将 "encoded" 字符串复制到剪贴板,它看起来像这样:
/9j/4AAQSkZJRgABAQAAAQABAAD/2wB
反斜杠消失了,如果我使用网站解码来自剪贴板的字符串,它会成功解码图像,但是当我通过 JSON 将字符串发送到服务器时,它看起来就坏了, 所以我怀疑是反斜杠让它坏了。
我的问题是,我应该在 JSON 上发送字符串之前寻找一种删除反斜杠的方法,还是服务器无法正确解释字符串的错误?
您正在发送编码的字符串,因为将它放入 JSONObject 不要那样做,这可能是那些反斜杠的原因。
我建议使用 Volley 将图像发送到服务器。
private void uploadImage() {
StringRequest stringRequest = new StringRequest(Request.Method.POST, URL, new Response.Listener<String>() {
@Override
public void onResponse(String response) {
//Do something with response
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
}
}
) {
@Override
protected Map<String, String> getParams() throws AuthFailureError {
HashMap<String, String> hashMap = new HashMap<>();
hashMap.put("image",imageToString(mBitmap)); //passing bitmap for converting into String
return hashMap;
}
};
mRequestQueue.addToRequestQueue(stringRequest); //mRequestQueue is from Volley
}
private String imageToString(Bitmap bitmap) {
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, byteArrayOutputStream);
byte[] imgBytes = byteArrayOutputStream.toByteArray();
return Base64.encodeToString(imgBytes, Base64.DEFAULT);
}
通过这个将位图转换为base64字符串
public static String getBase64Image(Bitmap bmp) {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
bmp.compress(Bitmap.CompressFormat.JPEG, 100, baos);
byte[] imageBytes = baos.toByteArray();
return Base64.encodeToString(imageBytes, Base64.DEFAULT);
}
并以这种方式调用并将 \n 替换为 ""
String Base64Photo = getBase64Image(decodeFile(bitmap)).replace("\n", "");
在您的 PHP 文件中执行此操作
- 从发布的数据 (base64) 中创建一个 Json 字符串,并删除“\n”字符(以避免该字符)
- 解码 JSON 字符串以删除 JSON 字符
- 获取解码后的字符串
这对我有用
$img_base64 = $_POST['ArchivoTexto'];
$sdata = '{"val" : "'.sub_str("\n","",$img_base64).'"}';
$ddata = json_decode($sdata);
$jdata = $ddata->val;//$jdata contain the clear base64 String