java - 如何将位图从 Android 流式传输到 Google App Engine Servlet?

标签 java android google-app-engine

我为这个问题苦苦挣扎了几天,你是我解决这个问题的最后机会。

目标:

将位图从 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),因此我尝试通过提取特定类来暴力破解它,但它产生了新问题。

所以我想问我可以从哪个方向来解决这个问题。
谢谢。

最佳答案

一些注释:

  1. 不要使用 Java 序列化在 JVM 之间传输数据。 Java 序列化没有标准化,并且不能保证 JVM 之间(甚至版本之间)兼容。

  2. 要发送二进制数据,最好使用 HTTP POST 并适当设置 Content-Type(例如 application/octet-stream)。

因此,要完成这项工作,请执行以下操作:

  1. 创建一个处理 POST 并获取二进制数据的 Servlet。使用servletRequest.getInputStream()获取二进制数据。

  2. 使用 Blobstore FileService API将数据保存到 blobstore。

  3. 在 Android 端使用 http client发出 POST 请求并向其中添加位图的二进制数据。如果您需要添加一些元数据,请使用 Http header 。

关于java - 如何将位图从 Android 流式传输到 Google App Engine Servlet?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10622005/

相关文章:

python - 我无法使用 Google App Engine 更新 appcfg.py,我收到错误 500

java - 更新 Google App Engine 模块

java - 使用 MARF 进行说话人识别

java - JLayeredPane 格式问题

带有自定义适配器的 Android ListView - getChildAt() 返回 null

android - VerticalGridView 水平滚动

android - 无法解析 : com. google.firebase :firebase-database:10. 2.0

java - Spring 在 View 中创建集合

java - Servlet 中的 ClasscastException

java - Cardview 不遵守相对布局中的 z 索引顺序