Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用Google端点保存blob_Java_Google App Engine_Google Cloud Datastore_Google Cloud Endpoints_Blobstore - Fatal编程技术网

Java 使用Google端点保存blob

Java 使用Google端点保存blob,java,google-app-engine,google-cloud-datastore,google-cloud-endpoints,blobstore,Java,Google App Engine,Google Cloud Datastore,Google Cloud Endpoints,Blobstore,我有一个应用程序,允许用户在blobstore中保存Blob。我现在有一个这样做的模式,但我对一些更简单、更不扭曲的东西感兴趣。在上下文中,假设我的应用程序允许用户上传动物的图片,其中有一段描述动物正在做什么 呈现模式 用户调用my endpoint api将动物的段落和名称保存在实体动物中注意:动物实体实际上有4个字段(名称,段落,BlobKey,以及blobServingUrl字符串)。但是端点api只允许保存上面提到的两个 在appengine端的endpoint方法中,在保存name和段

我有一个应用程序,允许用户在blobstore中保存Blob。我现在有一个这样做的模式,但我对一些更简单、更不扭曲的东西感兴趣。在上下文中,假设我的应用程序允许用户上传动物的图片,其中有一段描述动物正在做什么

呈现模式

  • 用户调用my endpoint api将动物的
    段落
    名称
    保存在实体
    动物
    注意:动物实体实际上有4个字段(
    名称
    段落
    BlobKey
    ,以及
    blobServingUrl
    字符串)。但是端点api只允许保存上面提到的两个

  • 在appengine端的endpoint方法中,在保存
    name
    段落
    后,我进行以下调用以生成blob服务url,我的endpoint方法将其返回给调用者

    @ApiMethod(name=“saveAnimalData”,httpMethod=httpMethod.POST) 公共字符串saveAnimalData(AnimalData请求)引发异常{ ... BlobstoreService BlobstoreService=BlobstoreServiceFactory.getBlobstoreService(); 字符串url=blobstoreService.createUploadUrl(“/upload”); 返回url; }

  • 在android端,我使用普通的http调用将图像的字节[]发送到blobstore。我使用apache
    DefaultHttpClient()
    注意:blobstore在保存图像后,使用blob密钥和服务url调用我的应用程序引擎服务器

  • 我使用普通的java servlet从blobstore(blobstore称为我的回调url)读取响应,即
    public void doPost(HttpServletRequest req,HttpServletResponse res)抛出ServletException,IOException
    。从servlet中,我将
    BlobKey
    blobServingUrl
    放入关联动物的
    Animal
    实体中。(我向blobstore传递了一些元数据,我将其用作标识相关动物实体的标记)

  • 所需模式

    这就是你的反应。重要的是,我想消除Javaservlet,并将我的整个api限制在google云端点。所以我的问题是:我将如何使用我的端点来执行步骤3和步骤4

    因此,我的想法是在发送
    段落
    名称
    数据的同时,将图像字节发送到端点方法
    saveAnimalData
    。然后在endpoint方法中,将图像发送到blobstore,然后将
    BlobKey
    BlobServicengUrl
    保存在我的实体
    Animal


    您的响应必须是java。谢谢。

    我在这里看到两个问题合二为一:

  • 谷歌云端点可以处理多部分文件吗?->我不知道这个TBH

  • 是否有比使用更简单的流程来存储blob

  • 这取决于图像的大小。如果将用户限制为<1MB文件,则可以将图像存储为
    Animal
    实体的
    Blob
    属性。它将允许您绕过
    BlobStoreService
    管道工程。见:

    此解决方案仍然取决于云端点如何将多部分文件作为原始
    字节[]
    处理

    2009年,我们在GWT+googleappengine上遇到了同样的问题,那是在blobstore服务提供之前


    GWT RPC和云端点接口有一些相似之处,对我们来说这是不可能的。我们必须创建一个普通的HTTP Servlet,并使用一个流式多部分文件解析器,因为Apache的HTTP Commons中的一个使用了文件系统。

    hey!我使用与您相同的流程,但我有一个问题。在我的成功路径servlet中,getUploads(req)方法返回一个空对象。。所以我没有任何blobket或blobServingUrl。你知道怎么了吗??谢谢