Android使用Volley将图像编码到Base64

时间:2016-03-24 06:40:46

标签: android android-volley

我让用户选择图像,然后图像将转换为Base64。我试图将Base64字符串附加到我的网址( Json格式),如下所示

http://codemoirai.esy.es/register.php?UserDetails={"Sex":"Male","Username":"joes","Bitmap":"iVBORw0KGgoAAAANSUhEUgAAAtAAAALQCAIAAAA2NdDLAAAAA3NCSVQICAjb4U\/gAAAgAEl......

但是我收到这样的错误:

 BasicNetwork.performRequest: Unexpected response code 414 for http://codemoirai.esy.es/register.php?UserDetails={"Sex":"Male","Username":"joes","Bitmap":"iVBORw0KGgoAAAANSUhEUgAAAtAAAALQCAIAAAA2NdDLAAAAA3NCSVQICAjb4U\/gAA...........

我可以知道导致此错误的原因吗?如何使用Volley发送编码为Base64格式的图像文件?

THANKYOU

1 个答案:

答案 0 :(得分:2)

响应code 414是Request-URI太长(你的base64图像字符串太长而无法放入url)。

  

服务器拒绝为请求提供服务,因为Request-URI   比服务器愿意解释的更长。这种罕见的情况   仅在客户端未正确转换POST时才会发生   当客户端请求具有长查询信息的GET请求   已经下降到重定向的URI“黑洞”(例如,a   重定向的URI前缀,指向其自身的后缀),或者当   服务器受到试图利用安全性的客户端的攻击   某些服务器中存在使用固定长度缓冲区进行读取的孔   或操纵Request-URI。

所以你应该从http get更改为http post并在http body

中发送base64图像

您的服务器必须处理http发布数据。我不知道你用什么语言来实现你的服务器端。所以我只发布客户样本 样品

public void uploadAvatar(String username,String sex, String accessToken, String image, Response.Listener<JSONObject> success, Response.ErrorListener error) {
    String endpoint = "your server api url";
    ScoinJsonRequest request = new ScoinJsonRequest(Request.Method.POST, endpoint, getuploadAvatarParams(user, sex, image), success, error);
    request.setRetryPolicy(new DefaultRetryPolicy(MY_SOCKET_TIMEOUT_MS, DefaultRetryPolicy.DEFAULT_MAX_RETRIES, DefaultRetryPolicy.DEFAULT_BACKOFF_MULT));
    requestQueue.add(request);
}

private Map<String, String> getuploadAvatarParams(String username,String sex,String stringBase64) 
 {
    Map<String, String> params = new HashMap<String, String>();
     params.put("username", username);
     params.put("gender", sex);
     params.put("ibase64", stringBase64);

    return params;
}

然后你可以使用uploadAvatar函数并输入所有必需的参数。 关于服务器端,您可以搜索阅读http post data + your language。我给你一个c# example

的链接