将Json中的图像发送到Android中的Web服务

将Json中的图像发送到Android中的Web服务,android,json,http-post,Android,Json,Http Post,我想在post中将一个json对象从我的android设备发送到服务器 在我的json对象中,我需要在Base64中添加一个映像。我无法使用to String将图像转换为Base64,因为字符串太短,无法包含Base64编码的文件。 我必须使用字节数组 如何将类似的内容发送到JSON Web服务 { "emergency":"gsjqsbl", "cod_valid":"O", "image":{ "content":"/9j/4AAQSkZJRg ## MY VERY VERY VERY

我想在post中将一个json对象从我的android设备发送到服务器

在我的json对象中,我需要在Base64中添加一个映像。我无法使用to String将图像转换为Base64,因为字符串太短,无法包含Base64编码的文件。 我必须使用字节数组

如何将类似的内容发送到JSON Web服务

{
"emergency":"gsjqsbl",
"cod_valid":"O",
"image":{
  "content":"/9j/4AAQSkZJRg ## MY VERY VERY VERY VERY VERY VERY VERY LONG IMAGE IN BASE64 ## BWNn+SV5H8KQADnn9ysrKA1EVX+lNDkSJ8ai8UADCLoAR3TWVlHT95AVvcfwCvD4Hq1joP5NX3Ciat7zyP4VlZW9bnl1sf//Z",
  "content_type":"image/jpg"
},
"indoor":"yes",
"access_conditional":"text",
"geo_shape":{
  "type":"Point",
  "coordinates":[
     2.0202024,
     45.799005
  ]
},
"lastupdate":"",
"ref_fr_sdis91":"",
"name":"TEST IN UPPERCASE WITH SPECIAL CHARACTERS ;/*-é@$~æ€",
"geo_point_2d":"45.799005,2.0202024",
"source":"soures",
"objectid":"",
"aed_location":"Spopopo"
}
我真的不会用字符串

谢谢

编辑:我已经做了什么:

以及:

public HttpResponse executePostRequest(String url, ByteArrayOutputStream outputStream) throws IOException {
LogWrapper.debug(DmaRestClient.class, "New HttpPost request: " + url);

DefaultHttpClient client = new DefaultHttpClient();
HttpPost request = new HttpPost(url);

request.setEntity(new ByteArrayEntity(outputStream.toByteArray()));
request.setHeader("Content-Type", "application/json");

return client.execute(request);
}

您应该使用一个lib来实现这一点。检查一下,它提供了两种对二进制内容进行ser/de的机制:使用经典的base64编码字符串,但在您的情况下,它看起来不起作用,或者将ser/de作为int数组。请注意,您必须在服务器端使用相同的机制,但它可能是另一个支持这种格式的库

使用Genson,您将创建表示json和image的类。content值将是字节数组。要在Genson中启用此选项,请执行以下操作:

Genson genson = new GensonBuilder().useByteAsInt(true).create();
genson.serialize(yourObject, theOutputStream);

如果你想不使用任何库而手工操作,你仍然可以,但这是一个糟糕的做法。。。使用与int数组相同的技巧=>Ser/de字节数组。

字符串如何太短而不能包含base64?我有一个类似的错误:@psv您解决了问题了吗?您最终使用了什么解决方案?我使用了StringBuilder来构建我的字符串。即使我必须执行stringBuilder.toString来解析字符串,我现在也没有任何错误。在使用StringBuilder之前,我不明白我的String对象发生了什么。好的,谢谢。我没有访问服务器端的权限。据我所知,它能够根据预定义的JSON对数据进行反序列化。我将测试Genson。服务器端的最大字符串大小限制与您的相同,因此必须更新服务器代码以支持您使用的格式。关于int数组的使用,您仍然会有一个超出内存限制的限制,即整数的最大大小,请参阅和。当我使用postman测试服务器时,当我在image字段中发送一个很长的json和一个很长的Base64字符串时,它会接受。对我来说,服务器端对图像字符串长度没有任何问题
Genson genson = new GensonBuilder().useByteAsInt(true).create();
genson.serialize(yourObject, theOutputStream);