使用 Google Endpoint 保存 blob

2024-02-17

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

呈现模式

  1. 用户调用我的端点 api 来保存paragraph and name实体中的动物Animal. Note: The Animal实体实际上有 4 个字段(name, paragraph, BlobKey, and blobServingUrl作为字符串)。但端点 api 只允许保存提到的两个。

  2. 在端点方法内,在应用程序引擎端,保存后name and paragraph我进行以下调用来生成 blob 服务 url,我的端点方法将其返回给调用者

    @ApiMethod(name = "saveAnimalData", httpMethod = HttpMethod.POST) 公共字符串saveAnimalData(AnimalData请求)抛出异常{ ... BlobstoreService blobstoreService = BlobstoreServiceFactory.getBlobstoreService(); String url = blobstoreService.createUploadUrl("/upload"); 返回网址; }

  3. 在 Android 端,我使用普通的 http 调用将图像的 byte[] 发送到 blobstore。我使用阿帕奇DefaultHttpClient(). Note:保存图像后,blobstore 使用 blob 键和服务 url 调用我的应用程序引擎服务器

  4. 我使用普通的 java servlet 从 blobstore(blobstore 称为我的回调 url)读取响应,即public void doPost(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException。从 servlet 中,我把BlobKey and blobServingUrl进入Animal相关动物的实体。 (我已将一些元数据传递到 blobstore,我将其用作标记来识别相关的动物实体)。

所需的模式

这就是您的回复的来源。重要的是,我想消除 java servlet,并将我的整个 api 限制为谷歌云端点。所以我的问题是:我将如何使用我的端点来执行步骤 3 和 4?

所以想法是将图像字节发送到端点方法saveAnimalData在我发送的同时paragraph and name数据。然后在端点方法中,将图像发送到 blobstore,然后持久化BlobKey and blobServingUrl在我的实体中Animal.

您的回复必须是 java 格式。谢谢。


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

  1. Google Cloud Endpoints 可以处理多部分文件吗? ->我不知道这个TBH

  2. 有没有比使用更简单的过程来存储 blobBlobStoreService https://developers.google.com/appengine/docs/java/javadoc/com/google/appengine/api/blobstore/BlobstoreService?

这取决于您的图像的大小。如果您将用户限制为 Blob你的财产Animal实体。它可以让你绕过BlobStoreService管道工。看 :https://developers.google.com/appengine/docs/java/datastore/entities?hl=FR https://developers.google.com/appengine/docs/java/datastore/entities?hl=FR

此解决方案仍然取决于 Cloud Endpoint 如何将多部分文件作为原始文件处理byte[]...

我们在 2009 年使用 GWT + Google App Engine 时遇到了同样的问题,当时 BlobStoreService 还没有推出。

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 Google Endpoint 保存 blob 的相关文章

  • Java中单例的其他方式[重复]

    这个问题在这里已经有答案了 只是我在考虑编写单例类的其他方法 那么这个类是否被认为是单例类呢 public class MyClass static Myclass myclass static myclass new MyClass pr
  • Spark scala 模拟 Spark.implicits 用于单元测试

    当尝试使用 Spark 和 Scala 简化单元测试时 我使用 scala test 和mockito scala 以及mockito Sugar 这只是让你做这样的事情 val sparkSessionMock mock SparkSes
  • Chrome 调试器注入 javascript

    我有这样的好奇心 是否可以以某种方式在我的页面中注入 javascript 并执行它并调试它 正如您在控制台中所做的那样 但在控制台中您无法暂停并观察变量 是否可以调试我通过控制台输入的代码 为什么无法调试通过 XHR 接收的代码 Than
  • 如何在连接到 Heroku PostgreSQL 的 Flask 应用程序上处理更多并发用户?

    Heroku 上的 Flask API 有许多端点 它们在将 json 化结果返回给客户端之前在我的 Heroku PostgreSQL 数据库上运行查询 我当前的计划是 Hobby Basic 层 因此数据库最多只能处理 20 个连接 如
  • Matplotlib loglog 的错误刻度/标签(双轴)

    我正在使用 matplotlib 创建对数图 如下图所示 默认刻度选择得很糟糕 充其量是这样 右边的 y 轴甚至根本没有 在线性等效中确实如此 而两个 x 轴都只有一个 有没有办法获得合理数量的带有标签的刻度 without为每个情节手动指
  • Jquery 以编程方式更改

    文本

    编辑 解决方案是将其添加到个人资料页面而不是性别页面 profile live pageinit function event p pTest text localStorage getItem gender 我在列表视图中有一个带有一些文
  • 如何为命令 stdout 添加 [stdout] 和 [stderr] 前缀?

    使用命令结构 https doc rust lang org std process struct Command html 如何向 stdout 和 stderr 缓冲区添加前缀 我希望输出看起来像这样 stdout things are
  • 将客户端库添加到 Razor 类库

    我正在学习 Blazor 我注意到创建 Razor 类库是一个很好的做法 您将在其中定义大部分组件 这样您就可以在客户端或服务器中使用它们 而不会出现太多问题 在不同的框架中 我习惯于以 SASS 形式包含库作为引导程序 这样我就可以在我的
  • 区分 NaN 输入和输入类型为“number”的空输入

    我想使用 type number 的表单输入 并且只允许输入数字
  • $ 在 JQuery 中意味着什么

    在下面的 var obj one 1 two 2 three 3 four 4 five 5 each obj function i val console log val 这里是什么意思 是对象吗 是一个别名jQuery对象 函数 它充当
  • 如何将 SQLite 数据库捆绑到 Go 二进制文件中?

    我尝试使用 go bindata 和 packr 但这些包没有显示如何将 SQLite 数据库文件打包到二进制文件中 我不需要以任何方式更新数据库 我只想在启动时从中读取数据 如何将 SQLite 数据库文件嵌入到 Go 二进制文件中 SQ
  • 即使在急切加载之后,belongs_to 关联也会单独加载

    我有以下关联 class Picture lt ActiveRecord Base belongs to user end class User lt ActiveRecord Base has many pictures end 在我的
  • 如何通过点击复制 folium 地图上的标记位置?

    I am able to print the location of a given marker on the map using folium plugins MousePosition class GeoMap def update
  • 如何禁用 solr 管理页面

    对于生产来说 拥有一个甚至不要求登录凭据的 solr 管理员感觉不安全 如何禁用默认的 solr 管理页面 我只是希望我的 web 应用程序使用 Solr 进行搜索词索引 我强烈建议保留管理页面用于调试目的 它在很多情况下拯救了我 有多种方
  • 进程被杀死后不会调用 onActivityResult

    我有一个主要活动 Main 和另一个活动 Sub 由 Main 调用 startActivityForResult new Intent this SubActivity class 25 当我在 Sub 时 我终止该进程 使用任务管理器或
  • 描述符“join”需要“unicode”对象,但收到“str”

    代码改编自here http wiki geany org howtos convert camelcase from foo bar to Foo Bar def lower case underscore to camel case s
  • 对象指针值作为字典的键

    我想使用对象的引用值作为字典的键 而不是对象值的副本 因此 我本质上想在字典中存储与另一个对象的特定实例关联的对象 并稍后检索该值 这可能吗 是不是完全违背了NSDictionary的理念 我可以看出我可能以错误的方式处理这个问题 因为字典
  • 为什么 try catch 块没有捕获 Promise 异常?

    我对承诺的错误处理感到困惑 答案可能很明显 但我不明白 我有以下示例代码 var test async function throw new Error Just another error try test then catch err
  • 通过 Telnet 运行应用程序

    我需要创建一个 BAT 文件来通过 telnet 运行应用程序 但据我所知 在 DOS 上无法执行此操作 Telnet 不允许在连接的瞬间向远程计算机发送任何命令 并且 BAT 文件中的每个后续命令只有在 telnet 停止后才会执行 这段
  • R data.table 1.9.2 关于 setkey 的问题

    这似乎是 1 8 10 后引入的一个错误 与包含列表的 DT 的 setkey 相关 运行下面两个代码来查看问题 library data table dtl lt list dtl 1 lt data table scenario 1 p

随机推荐