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

将图像从Android上传到GAE数据存储,android,google-app-engine,google-cloud-datastore,Android,Google App Engine,Google Cloud Datastore,如何将图像从Android客户端上传到GAE(谷歌应用程序引擎)数据存储 尚未找到教程,已尝试了7天。首先,您需要确定要上载的图像文件的大小。这是因为如果您使用的数据存储最多只能使用一个文本字段,该字段最多只能保存1MB的数据 我建议您考虑使用Blobstore或更好的Google云存储服务来保存图像数据 步骤大致如下: 用你的Android代码和图像字节写一篇文章 在应用程序引擎端,接收字节,对它们进行编码,然后使用谷歌云存储服务保存数据。然后,您可以使用GCS标识符并将其保存在数据存储中,

如何将图像从Android客户端上传到GAE(谷歌应用程序引擎)数据存储


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

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

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

步骤大致如下:

  • 用你的Android代码和图像字节写一篇文章
  • 在应用程序引擎端,接收字节,对它们进行编码,然后使用谷歌云存储服务保存数据。然后,您可以使用GCS标识符并将其保存在数据存储中,作为对图像的引用

请看下面的示例代码

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

  • 创建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;
    }
    
    }

  • 生成云端点(右键单击->谷歌->生成云端点)
  • generate客户端库(右键单击项目->谷歌->生成客户端库)
  • 在android应用程序中->打开photoendpoint.model(包)->Photo.java 替换你的 公共字节[]decodeBlobImage(){ } 到 这个

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

  • 在您的活动中执行此操作

                    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);
        }
    

  • 请回复下面的答案:)@Romin您推荐接受答案中使用的方法吗?POJO中也缺少编码和解码方法。