将带有JSONObject的Base64发送到服务器(ANDROID)

时间:2017-07-23 10:45:10

标签: android json base64

我认为当我将图像编码为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上的字符串

 JSONObject postDataParams = new JSONObject();

        postDataParams.put(ArchivoTexto, encoded);

现在我看到的问题是,当我向JSON发送编码字符串时,控制台说它发送的东西看起来像这样:

\/9j\/4AAQSkZJRgABAQAAAQABAAD\/2wB

但是如果我复制到剪贴板中,那么"编码"字符串看起来像这样:

/9j/4AAQSkZJRgABAQAAAQABAAD/2wB 

反斜杠消失,如果我使用网站解码来自剪贴板的字符串,它会成功解码图像,但是当我通过JSON将字符串发送到服务器时,它看起来很破碎,所以我怀疑反斜杠让它破裂。

我的问题是,我是否应该寻找一种方法来在JSON上发送字符串之前删除反斜杠,或者是因为无法正确解释字符串而导致服务器出错?

3 个答案:

答案 0 :(得分:1)

在PHP文件中执行此操作

  1. 从发布的数据(base64)创建一个Json字符串,并删除" \ n"字符(避免使用该字符)
  2. 解码JSON String以删除该JSON字符
  3. 获取已解码的字符串
  4. 这对我有用

    $img_base64 = $_POST['ArchivoTexto'];
    $sdata = '{"val" : "'.sub_str("\n","",$img_base64).'"}';
    
    $ddata = json_decode($sdata);
    
    $jdata = $ddata->val;//$jdata contain the clear base64 String
    

答案 1 :(得分:0)

您正在发送已编码的字符串,方法是将其放入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);

}

答案 2 :(得分:0)

通过此

将位图转换为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", "");