Java 如何使用截击将base64字符串发送到服务器

Java 如何使用截击将base64字符串发送到服务器,java,android,bitmap,android-volley,Java,Android,Bitmap,Android Volley,我正在使用android中的volley库调用我们的服务器,当尝试向服务器发送base64编码的图像时,请求失败,但当删除编码字符串时,请求成功,没有任何问题。 我使用以下代码对我的图像进行编码 public static String imgToBase64(Bitmap bitmap) { ByteArrayOutputStream out = null; try { out = new ByteArrayOutputStream(); bitmap.compress(Bitma

我正在使用android中的volley库调用我们的服务器,当尝试向服务器发送base64编码的图像时,请求失败,但当删除编码字符串时,请求成功,没有任何问题。 我使用以下代码对我的图像进行编码

  public static String imgToBase64(Bitmap bitmap) {
ByteArrayOutputStream out = null;
try {
  out = new ByteArrayOutputStream();
  bitmap.compress(Bitmap.CompressFormat.JPEG, 50, out);
  out.flush();
  out.close();
  byte[] imgBytes = out.toByteArray();
  return Base64.encodeToString(imgBytes, Base64.DEFAULT);
} catch (Exception e) {
  return null;
} finally {
  try {
    out.flush();
    out.close();
  } catch (IOException e) {
    e.printStackTrace();
  }
}
}


并使用以下截击发送请求

public void sendDataToServer(final ApiResponse.Listener<JSONObject> listener, final ApiResponse.ErrorListener errorListener, String image) {
String url = String.format(ASK, image);
url = URLEncoder.encode(url);
JsonRequest sendRequest = new JsonRequest(Request.Method.POST, url,
        new Response.Listener<JSONObject>() {
          @Override
          public void onResponse(JSONObject response) {
            listener.onResponse(response);
          }
        }, new Response.ErrorListener() {
  @Override
  public void onErrorResponse(VolleyError error) {
    if (error != null) {
      if (error.networkResponse != null) {
        errorListener.onErrorResponse(error.networkResponse.statusCode, null);
      } else {
        errorListener.onErrorResponse(500, null);
      }
    }
  }
});
RequestPipeline.getInstance(mContext).addToRequestQueue(sendRequest);
public void sendDataToServer(最终ApiResponse.Listener侦听器,最终ApiResponse.ErrorListener ErrorListener,字符串图像){
字符串url=String.format(询问、图像);
url=URLEncoder.encode(url);
JsonRequest sendRequest=新的JsonRequest(Request.Method.POST,url,
新的Response.Listener(){
@凌驾
公共void onResponse(JSONObject响应){
onResponse(response);
}
},new Response.ErrorListener(){
@凌驾
公共无效onErrorResponse(截击错误){
if(错误!=null){
if(error.networkResponse!=null){
errorListener.OneErrorResponse(error.networkResponse.statusCode,null);
}否则{
errorListener.onErrorResponse(500,空);
}
}
}
});
RequestPipeline.getInstance(mContext).addToRequestQueue(sendRequest);

}

查看您的代码,您似乎试图将整个编码图像作为URL的一部分传递。显然,这会失败,因为服务器通常不支持长度超过几千个符号的URL。要将长数据传递给服务器,应该使用文章的正文。我不知道您的
JsonEmptyResponseRequest
类是什么,服务器需要什么格式(如何指定
ASK
)。只是想让你知道这是如何实现的

StringRequest sendRequest = new StringRequest(Request.Method.POST, url,
        new Response.Listener ...,
        new Response.ErrorListener...){

  @Override
  protected Map<String, String> getParams() throws AuthFailureError {
      Map<String, String> params = new HashMap<String, String>();
      params.put(IMAGE_PARAM_NAME, image);
      return params;
  }
};
StringRequest sendRequest=新的StringRequest(Request.Method.POST,url,
新响应。侦听器。。。,
新响应。ErrorListener…){
@凌驾
受保护的映射getParams()引发AuthFailureError{
Map params=新的HashMap();
参数put(图像参数名称,图像);
返回参数;
}
};

在现实生活中,您可能希望创建自己的
Request
子类,并将image作为构造函数参数传递给该子类,并准确隐藏服务器在该类中所需的详细信息。请注意,
JsonRequest
覆盖了
getBody
getBodyContentType
以使用JSON,因此这不适用于
JsonRequest
子类。

提供了更多详细信息。请求究竟是如何失败的?服务器响应不好?网络问题?还有别的吗?还有什么是
JsonEmptyResponseRequest
?感谢您的时间,JsonEmptyResponseRequest我使用它来处理我的请求,将它作为我的自定义类提供给服务器,并询问我的url以使用我的参数格式化它。我会试试你的主意now@iosamammohamed当我说“我不知道你的某某”时,我的意思不是说我不知道大概的意思,而是说我不知道你在问题中没有提到的具体细节,这些细节对于提供正确答案很重要