将图像从Android上传到GAE数据存储区

时间:2014-03-27 21:20:48

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

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

尚未发现任何教程,已经尝试了7天。

2 个答案:

答案 0 :(得分:3)

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

  1. 创建POJO照片
  2. 公共课照片{

    @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. Genereate CLient Side Libraries(右键单击项目 - > google - >生成客户端库)
    3. 在您的Android应用程序中 - > open photoendpoint.model(package) - > Photo.java 替换你的 public byte [] decodeBlobImage(){ } 至 此

      public byte [] decodeBlobImage(){ return 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);
          }
      

答案 1 :(得分:2)

首先,您需要确定要上传的图像文件的大小。这是因为如果您使用的数据存储最多可以使用一个TEXT字段,该字段最多只能保存1 MB的数据。

我建议您使用Blobstore或更好的Google云端存储服务作为保存图像数据的方法。

步骤大致如下:

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

请查看以下thread示例代码。