python - 提供从 AWS EC2 实例下载的文件的最佳方式是什么?
问题描述
所以我应该创建一个将文件(图像)上传到运行 Linux 的 AWS Ec2 实例的应用程序。我使用 Flask 创建上传逻辑和一个简单的 HTML 网页来上传文件。
在此之后,我应该从这些图像生成缩略图和网络优化图像并将它们存储在一个目录中,然后提供“网络优化”图像目录以供下载。我如何实现这一目标?
我以前在这里问过这个。我也粘贴了我在该线程上使用的代码。
所以我的问题是:
使用 pscp 将文件传输到 EC2 实例是个好主意吗?
使用 paramiko 在远程实例上运行 ssh 以调用执行图像处理的 shell 脚本(使用 python 生成缩略图 web 优化图像)是一个好主意吗?
如何通过客户端/主机上的简单下载按钮获取压缩图像?
谢谢。
解决方案
我不完全确定这是否是您必须仅使用 EC2 实例的限制之一。如果不是,如果您必须编写一个强大的解决方案,我会推荐如下内容。
将文件上传到 AWS S3 存储桶,保存所有图像(原始)会便宜得多。让我们称之为
images_original
现在您可以编写一个 lambda 来监控存储桶,每次发生新的上传时,处理图像以创建不同分辨率的缩略图等,并将它们上传到各自的存储桶(images_thumbnails、images_640_480 等)。要转换图像,我认为您不应该在远程实例中执行 SSH 来运行转换。最好使用 python 本机库,例如 lambda 本身内部的枕头。
在客户端,您可以简单地访问存储桶中的相应文件。例如,如果您想要缩略图,您可以访问 thumbnail_bucket_url/file_name.jpeg 等。
此外,您可以拥有从 S3 获取签名 url 的服务。
要了解如何使用 lambda 监控 S3 存储桶,您可以参考THIS
在创建 lambda 时要记住一件重要的事情,所有依赖的库都必须作为 zip 文件上传。
例如。pip install Pillow -t
推荐阅读
- android - 有没有办法查看手机上次进入省电模式的时间?
- jquery - jQuery 函数未使用新参数执行
- python - 带环顾和替换的正则表达式
- python - 将python列表划分为列表的子集(子集的数量越少越好),每个列表的总和小于K
- javascript - 用 JQuery 加载的内容需要表单提交以重新加载父项中的内容
- javascript - 为什么我在 Vue.js Storybook 中的“数据”参数没有覆盖组件的数据?
- google-app-engine - 为我的 API 生成 Open API 时出错
- three.js - TREE.JS / GLSL 如何将着色器大小与世界坐标匹配?
- algorithm - DFS Graph Traversal 打印所有可能的路径,而不会丢失任何贡献的边缘
- javascript - ES6 链式访问以前的方法