代码之家  ›  专栏  ›  技术社区  ›  Kalu Khan Luhar

正在将base64编码映像上载到服务器-400服务器错误

  •  0
  • Kalu Khan Luhar  · 技术社区  · 6 年前

    我正在将base64编码的图像上载到 HelpScout server 使用JSON有效载荷,使用凌空飞行。这种回归 com.android.volley.serverror服务器错误 状态码400 . 我将图像编码如下:

    var imageEncoded = ""
                try {
                    val bitmap = MediaStore.Images.Media.getBitmap(context?.contentResolver, uri)
                    //val bitmap = BitmapFactory.decodeFile(path)
                    val stream = ByteArrayOutputStream()
                    bitmap.compress(Bitmap.CompressFormat.JPEG, 70, stream)
                    val imageBytes = stream.toByteArray()
                    imageEncoded = Base64.encodeToString(imageBytes, Base64.DEFAULT)
                } catch (e: Exception) {
                    e.printStackTrace()
                }
    

    我已经问了几个问题,但没什么运气。下面是我正在使用的截击法:

    public static void volleyRowJsonPostRequest(Context context,String url, JSONObject object,final Map<String, String> headers, final VolleyTaskListener taskListener) {
            final JsonObjectRequest jsObjRequest = new JsonObjectRequest(Request.Method.POST, url, object,
                    new Response.Listener<JSONObject>() {
                        @Override
                        public void onResponse(JSONObject response) {
                            try {
                                taskListener.onTaskComplete(response.toString());
                            } catch (Exception e) {
                                e.printStackTrace();
                            }
                        }
                    },
                    new Response.ErrorListener() {
                        @Override
                        public void onErrorResponse(VolleyError error) {
                            NetworkResponse networkResponse = error.networkResponse;
                            if (networkResponse != null)
                                taskListener.onTaskFailed(networkResponse.statusCode);
    
                        }
                    }
            ){
                @Override
                public Map<String, String> getHeaders() throws AuthFailureError {
                    return headers;
                }
            };
    
            jsObjRequest.setRetryPolicy(new DefaultRetryPolicy(
                    60000,
                    DefaultRetryPolicy.DEFAULT_MAX_RETRIES,
                    DefaultRetryPolicy.DEFAULT_BACKOFF_MULT));
            jsObjRequest.setShouldCache(false);
            Volley.newRequestQueue(context).add(jsObjRequest);
        }
    

    jsonObject是:

    {
      "subject": "some test value",
      "mailboxId": 170715,
      "type": "email",
      "status": "active",
      "customer": {
        "email": "mymailaddress@mail.com"
      },
      "threads": [
        {
          "type": "customer",
          "text": "some test value",
          "customer": {
            "email": "mymailaddress@mail.com"
          },
          "attachments": [
            {
              "fileName": "Screenshot_20181005-160109.png",
              "mimeType": "image\/png",
              "data": "base64 encoded string goes here"
            }
          ]
        }
      ],
      "tags": [
        "Swytch",
        "Help"
      ]
    
    }
    
    1 回复  |  直到 6 年前
        1
  •  1
  •   Kalu Khan Luhar    6 年前

    我修正了错误,只是将base64编码方法更新为 Base64.encodeToString(imageBytes, Base64.DEFAULT) Base64.encodeToString(imageBytes, Base64.NO_WRAP) . 用 Base64.默认 生成的编码字符串是编码器标志(包括换行符)的默认值。 Base64.NoeRead 编码器标志位,省略所有行终止符(即,输出将在一条长线上)。 Here 更多信息。