我为这个问题苦苦挣扎了几天,你是我解决这个问题的最后机会。
目标:
将位图从 Android 客户端上传到 Google 应用引擎并将其保存在数据存储区中。
- 我使用序列化将对象从客户端传输到服务器,反之亦然。
我尝试过的事情:
- 发送位图
- 但是我得到了
java.io.NotSerializedException: android.graphics.Bitmap
- 但是我得到了
然后我尝试在客户端从位图 Blob 创建,如下所示:
ByteArrayOutputStream bos = new ByteArrayOutputStream(); bitmap.compress(Bitmap.CompressFormat.PNG, 100, bos); Byte[] bArray = bos.toByteArray(); Blob blob = new Blob(bArray);
但在客户端,我没有 Google 应用程序引擎类(用于 Blob),因此我尝试通过提取特定类来暴力破解它,但它产生了新问题。
所以我想问我可以从哪个方向来解决这个问题。
谢谢。
最佳答案
一些注释:
不要使用 Java 序列化在 JVM 之间传输数据。 Java 序列化没有标准化,并且不能保证 JVM 之间(甚至版本之间)兼容。
要发送二进制数据,最好使用 HTTP POST 并适当设置
Content-Type
(例如application/octet-stream
)。
因此,要完成这项工作,请执行以下操作:
创建一个处理 POST 并获取二进制数据的 Servlet。使用
servletRequest.getInputStream()
获取二进制数据。使用 Blobstore FileService API将数据保存到 blobstore。
在 Android 端使用 http client发出 POST 请求并向其中添加位图的二进制数据。如果您需要添加一些元数据,请使用 Http header 。
关于java - 如何将位图从 Android 流式传输到 Google App Engine Servlet?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10622005/