python - 如何在 Python 中使用 S3 存储桶和 Boto3 将图像上传到 MongoDB
问题描述
我正在开发一个 Python 应用程序,其中所需的功能是网络摄像头用于接收实时视频源,并根据条件是否为真,单击图像并将其上传到数据库。
我使用的数据库是 MongoDB。据我了解,将图像直接上传到数据库不是正确的方法。所以,我想做的是以下几点:
- 从网络摄像头单击图像
- 图像被上传到 S3 存储桶(来自相同的 Python 脚本,因此可能使用 boto3)
- 检索上传图像的 URL(这似乎是棘手的部分)
- 然后这个 URL 和其他一些细节被上传到数据库。(这是容易的部分)
我理想的工作流程是获取该图像并将其上传到 S3 存储桶,检索 URL,然后将此 URL 上传到数据库中的所有 .py 脚本。
我的问题是:如何将图像上传到 S3 存储桶,然后在 Python 脚本中通过 boto3 检索其公共 URL?
我也欢迎任何有关将图像存储到 MongoDB 的更好方法/策略的建议。我在一些页面上看到 GridFS 可能是一个很好的方法,但不建议频繁发生图像上传(实际上使用 AWS 是更可取的方式)。
解决方案
您不需要“检索”公共 url,您可以在上传时指定存储桶和 s3 对象的名称,因此您已经有了需要知道公共 url 上传后的信息,它不像 s3 会在上传后为您的对象分配一个新的唯一名称。
推荐阅读
- c++ - 为什么我们限制堆栈的大小而不是内存中的堆
- python - 如何在 64 位组件上使用 win32api(或类似的)?
- java - Spring 自定义值解析器
- docker - 无法加载动态库“libcuda.so.1”;dlerror:libcuda.so.1:无法打开共享对象文件:没有这样的文件或目录
- mongodb - 替代使用带有lazy_static的'await'!生锈的宏?
- java - Java,读取空行
- powershell - 如何在基于创建日期重命名文件的 powershell 脚本中包含周数?
- node.js - node.js 中的外部内存与堆内存 - 任何一种权衡方式?
- pandas - Dask 无法使用连接数据写入镶木地板
- android - '尝试在空对象引用上调用接口方法'在片段之间进行通信