由于字符串太大而无法获得有效的有效负载(base64图像)

问题描述 投票:0回答:1

我在我的Android应用程序中使用Volley库在google cloud api中发出http请求。我的问题在于我发送的有效负载。 Google返回400错误。如果我手动创建有效负载(json文件),它就可以正常工作。

我正在创建一个JSONObject并将字符串“[BASE64]”放入imageBytes。如果我直接输入base64编码的字符串,那么只要我执行JSONObject.toString()就会遇到转义问题。

这是我的代码:

JSONObject payload = new JSONObject();
JSONObject image = new JSONObject();
JSONObject imageBytes = new JSONObject();

imageBytes.put("imageBytes", "[BASE64]");
image.put("image", imageBytes);
payload.put("payload", image);

requestBody = payload.toString().replace("[BASE64]", convert_bitmap(args[0]));

private String convert_bitmap(Bitmap bitmap){
    ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
    bitmap.compress(Bitmap.CompressFormat.JPEG, 100, byteArrayOutputStream);
    byte[] byteArray = byteArrayOutputStream.toByteArray();
    return Base64.encodeToString(byteArray, Base64.DEFAULT);
}

我还尝试加载示例有效负载文件并将[BASE64]替换为我的base64字符串,获得相同的结果。唯一有效的是直接添加base64编码的图像

imageBytes.put("imageBytes", "/9j/4AAQSkZJRgA...");

但只有图像非常小。当我在那里放一个大字符串时,我得到编译器错误(字符串太长)。我还尝试将请求发送到我的服务器并保存,以便查看工作和我的服务器之间的差异。我注意到的唯一的事情是,在非工作示例中,行长度更短:

{"payload":{"image":{"imageBytes":"/9j/4AAQSkZJRgABAQAAAQABAAD/4gIoSUNDX1BST0ZJTEUAAQEAAAIYAAAAAAIQAABtbnRyUkdC
IFhZWiAAAAAAAAAAAAAAAABhY3NwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAA9tYAAQAA
AADTLQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAlk
ZXNjAAAA8AAAAHRyWFlaAAABZAAAABRnWFlaAAABeAAAABRiWFlaAAABjAAAABRyVFJDAAABoAAA..."}}}

和工作的:

{"payload":{"image":{"imageBytes":"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..."}}}

恢复:当我将base64编码的图像直接添加到json文件中时,我可以使用它。此外,当我将一个非常小的图像文件转换为base64并将字符串直接放入我的代码时,它的工作原理。但是当处理普通图像(用手机等拍摄的照片)并将base64编码的字符串放在imageBytes字段中时,由于转义问题(toString()似乎在转换JSONObject时添加斜杠)并替换类似[BASE64]之类的东西它不会工作由于换行符或字符串长度限制,我的字符串也不起作用。我希望我的问题能在这里,但无法解决。

java android base64
1个回答
1
投票

哦,男孩......我已经解决了!解决方案是Base64.NO_WRAP标志。正如我在发布问题时已经想到的那样,问题是在转换为base64时添加了换行符。

© www.soinside.com 2019 - 2024. All rights reserved.