我正在使用AppEngine,Cloud Endpoints和Objectify。我想存储一个二进制文件(大约2 kB),它可能包含二进制文件(图像文件),字符串和XML。无需在App Engine上列出或索引内容。它应该与实体一起存储。
我知道我可以,但我不想将这些信息存储在GCS上。
我使用字节数组服务器端,Objectify持续存在,但我意识到Cloud Endpoints将它转换为客户端的String,我认为这不是非常有效,因为我需要转换客户端生成的二进制文件( image file)首先使用String,以便Cloud Endpoints将其转换回byte []。
我尝试使用字节数组客户端,Cloud Endpoints无法处理,因为它包含无效字符",例如空格。当我URLEncode它时,Endpoints抱怨%为非法字符。所以这似乎不是谷歌计划使用的方式。
如果存在可以通过端点传输并由Objectify持久化的数据类型的任何建议或经验,以避免双方的低效转换,并且可以托管二进制文件以及文本字符串?
答案 0 :(得分:0)
通过Cloud Endpoints发送二进制数据into a Base64 String时如何使用它?无需更改存储端的任何内容,它将保持byte[]
。
只需将您的byte[]
放入专门的课程中,然后为其声明@ApiTransformer
:
@ApiTransformer(BinaryDataOrStringOrXMLTransformer.class)
public class BinaryDataOrStringOrXML {
private final byte[] data;
//add constructor, getters and setters
}
变压器代码:
public class BinaryDataOrStringOrXMLTransformerimplements Transformer<BinaryDataOrStringOrXML, String> {
public String transformTo(BinaryDataOrStringOrXML in) {
return Base64.getEncoder().encodeToString(in.getData());
}
public BinaryDataOrStringOrXML transformFrom(String in) {
return new BinaryDataOrStringOrXML(Base64.getDecoder().decode(in));
}
}
您可能需要测试getUrlDecoder()
和getDecoder()
,我不确定哪个可以使用Cloud Endpoints。
在客户端,您还需要解码Base64。如果你在Android中非常容易。在javascript中它可能有点复杂,但有一些有用的库。