我正在使用App Engine的云端点,我有一个Android客户端。除了将图像从Android客户端发送到端点之外,我能够正确地完成所有操作。
我使用BytesField作为我的端点,但在Android中,它显示为String(params只接受String)。我手机里有一个Drawable,我想发送它。
REGISTER_RESOURCE = endpoints.ResourceContainer(
message_types.VoidMessage,
username=messages.StringField(1, variant=messages.Variant.STRING, required=True),
password=messages.StringField(2, variant=messages.Variant.STRING, required=True),
email=messages.StringField(3, variant=messages.Variant.STRING, required=True),
phone=messages.StringField(4, variant=messages.Variant.STRING, required=True),
gender=messages.StringField(5, variant=messages.Variant.STRING, required=True),
location=messages.StringField(6, variant=messages.Variant.STRING, required=True),
picture=messages.BytesField(7, variant=messages.Variant.BYTES)
)
@endpoints.method(REGISTER_RESOURCE, LoginUser,
path='register', http_method='POST',
name='login.register')
def validate_register(self, request):
...
我尝试通过这样做将我的Drawable转换为String:
// convert image to byte array and encode to base 64
Bitmap bitmap = ((BitmapDrawable) photo).getBitmap();
ByteArrayOutputStream stream = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, stream);
byte[] bitmapData = stream.toByteArray();
String encodedImage = Base64.encodeToString(bitmapData, Base64.DEFAULT);
validateRegister.setPicture(encodedImage);
但它不起作用。我试着查看encodedImage的值,它是一个非常长的字符串。
我打算将Drawable从Android安装到服务器,然后将其存储在数据存储区(db.Model)BlobProperty中。