我让用户选择图像,然后图像将转换为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
答案 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