【问题标题】:Upload Image from Android to GAE datastore将图像从 Android 上传到 GAE 数据存储
【发布时间】:2014-05-07 03:00:08
【问题描述】:

如何将图像从 Android 客户端上传到 GAE (Google App Engine) 数据存储区?

尚未找到教程,已尝试过去 7 天。

【问题讨论】:

    标签: android google-app-engine google-cloud-datastore


    【解决方案1】:

    好的,我可以上传这样的图片

    1. 创建 POJO 照片

    公开课照片{

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private long id;
    
    
    
    public long getId() {
        return id;
    }
    
    public void setId(long id) {
        this.id = id;
    }
    
    private Blob blobImage;
    
    public Blob getBlobImage() {
        return blobImage;
    }
    
    public void setBlobImage(byte[] bytes) {
        this.blobImage = new Blob(bytes);
    }
    
    private String name;
    
    public String getName() {
        return name;
    }
    
    public void setName(String name) {
        this.name = name;
    }
    
    private String type;
    
    public String getType() {
        return type;
    }
    
    public void setType(String type) {
        this.type = type;
    }
    

    }

    1. 生成云端点(右键单击 -> google -> 生成云端点)
    2. 生成客户端库(右键单击项目 -> google -> 生成客户端库)
    3. 在你的 android 应用程序中 -> 打开 photoendpoint.model (package) -> Photo.java 更换你的 公共字节[] decodeBlobImage() { } 到 这个

      公共字节[] decodeBlobImage() { 返回 com.google.api.client.util.Base64.decodeBase64(blobImage); }

    4. 在您的活动中执行此操作

                      Photo photo = new Photo();
          Bitmap bitmap = BitmapFactory.decodeResource(getResources(),
          R.drawable.sherlock);
          ByteArrayOutputStream stream = new ByteArrayOutputStream();
          bitmap.compress(Bitmap.CompressFormat.JPEG, 100, stream);
          byte[] byteArray = stream.toByteArray();
          photo.encodeBlobImage(byteArray);
          photo.setName("Sherlock");
          photo.setName("sherlock");
          photo.setType("image/jpeg");
          photo.setId((long) 8232);
          Photoendpoint.Builder builder = new Photoendpoint.Builder(
          AndroidHttp.newCompatibleTransport(), new JacksonFactory(),
                  null);
          builder = CloudEndpointUtils.updateBuilder(builder);
      
          Photoendpoint endpoint = builder.build();
      
          Log.d("Exception", "inserting image");
          try {
              Log.d("Exception", "inserting");
              endpoint.insertphoto(photo).execute();
      
          } catch (IOException e) {
              // TODO Auto-generated catch block
              Log.d("Exception", "" + e);
          }
      

    【讨论】:

    • POJO中也缺少编码和解码的方法。
    【解决方案2】:

    首先,您需要确定要上传的图片文件的大小。这是因为如果您使用的数据存储区充其量只能使用最多只能保存 1 MB 数据的 TEXT 字段。

    我建议您考虑使用 Blobstore 或更好的 Google Cloud Storage 服务来保存您的图像数据。

    步骤大致如下:

    • 使用图像字节从您的 Android 代码执行 POST。
    • 在 App Engine 端,接收字节,对其进行编码,然后使用 Google Cloud Storage Service 保存数据。然后,您可以使用 GCS 标识符并将其保存在数据存储区中作为对图像的引用。

    查看以下thread 以获取示例代码。

    【讨论】:

    • 请在下面回复答案:)
    • @Romin 你推荐接受的答案中使用的方法吗?
    猜你喜欢
    • 2014-06-20
    • 1970-01-01
    • 2015-05-19
    • 1970-01-01
    • 2019-02-11
    • 2018-06-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多