gpt4 book ai didi

python - 通过 Google Cloud Endpoints 将 UIImage 上传到 AWS S3

转载 作者:行者123 更新时间:2023-12-01 16:41:55 30 4
gpt4 key购买 nike

我们在 iOS 客户端上使用 GAE Python SDK 1.9.4 和 Google Cloud Endpoints。我们从 AWS S3 上的存储桶向我们的用户提供图像,并且通过 boto 从 iOS 到 GAE 再到 AWS 的交互没有问题。图书馆。

我们正在寻求的具体用例是允许我们的用户更新他们的头像。在 appserver 上,我们有单元测试成功地计算并从文件上传图像数据到 S3,以及它们的 base64 字符串表示,并返回 URL 以供客户端使用。文件大小从几千字节到几兆不等。单元测试涵盖了 boto Controller ,以及调用它的 endpoints.api 包装器。我们已经使用源自 python base64 的 base64 字符串进行了测试。图书馆,以及 GTLBase64 iOS 上的工具。字符串是网络安全的。在 iOS 中,我们强制图像为 160x160 JPG 并具有最大压缩率,这始终会产生大约 3K 的 base64 字符串。

这是 protopc 消息类:

class AvatarUploadRequest(messages.Message):
uid = messages.StringField(1)
avatar = messages.BytesField(2)
content_type = messages.StringField(3)

通过appserver单元测试,我们成功将图片数据分配到 avatar BytesField() ,将有效负载发送到 boto,然后可以在浏览器中查看 S3 托管的图像。

当尝试通过 API 资源管理器和生成的 iOS 客户端与头像上传端点进行交互时,就会出现我们的问题。 API 服务器经常失败并返回 503 Service Unavailable ,使用我们在单元测试中使用的已知良好数据。 API 服务器正常运行,所有其他调用成功完成。

仅对于 Avatar Upload 端点,API 资源管理器返回以下响应:
{
"error": {
"errors": [{
"domain": "global",
"reason": "backendError",
"message": ""
}],
"code": 503,
"message": ""
}
}

删除 avatar POST 请求正文中的有效负载消除了错误。 @endpoints-decorated 方法中的代码执行。与 avatar有效载荷,在我们的实现上游执行失败(即方法中的任何代码都没有运行)。

我们是否遇到了 Endpoints API 服务器的限制?
我们不应该以这种方式使用它吗?

搜索文档,没有提到 BytesField() 的上限尺寸。有人提到将 Blobstore API 用于较大的文件(视频、图像等),但它不适合我们的用例;我们不想将图像数据存储在 AppEngine、数据存储或其他地方,我们只需要通过我们的应用服务器将其汇集起来并将其转发到 S3。

非常感谢任何见解。

最佳答案

只是想跟进这个问题,我们采取了哪些措施来解决这个问题。

允许通过 Google Cloud Endpoints 上传的二进制数据似乎有一个硬性上限。我们没有深入挖掘以找到它的实现位置,相反,我们决定提取一个模块,其唯一职责是与 AWS 通信,并使用另一个框架定义新的端点。

为了争论,我们选择用 Flask 微框架包装新模块的端点,并通过 boto 库管理将二进制数据上传到 AWS。在上面的原始帖子中通过 Cloud Endpoints 失败的相同数据现在通过 Flask 可以 100% 工作。

关于python - 通过 Google Cloud Endpoints 将 UIImage 上传到 AWS S3,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23597426/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com