Python中关于Amazon S3存储服务的使用问题
最近项目中有这样的需求:
- 通过上传图片,然后,后台经过处理把结果(json 格式)返回调用方。
- 通过传递图片的 url, 服务端通过下载 url 对应的图片,然后,服务器对下载的图片处理,把处理结果(json 格式)返回给调用方。
PS: 服务端需要保存图片。 之前都是通过图片,保存在服务器特定目录下,然后把路径传递给处理函数。
现在由于处理图片的服务器要扩展为多台( api 服务器还是一台),所以就想把图片存放在 s3 上面,然后,把 s3 上面图片对应的 url 传递给处理函数。但是,现在我的做法是:
- 把调用者上传到服务器图片数据再次上传到 s3,然后,获取对应的 url,给后面函数处理。
- 如果调用者是通过传递图片 url 上传图片数据,服务端通过下载 url 对应的图片,然后在上传到 s3,最后再获取图片在 s3 的 url,给后面的函数处理。
问题: 改为 s3 存放图片之后,响应时间相差很多,有什么方法可以优化?或者是我的做法欠妥还有更好的方法?
Python中关于Amazon S3存储服务的使用问题
7 回复
- s3 支持客户端直传吗?服务端发个 token 给调用方,调用方自己上传到 s3,我记得七牛支持这个。
2. 同理,s3 支持直接下载并保存图片吗,这样就不用服务端重复下载了,七牛支持这个,s3 应该也支持。
3. 加带宽吧
我无法理解你的问题
s3 可以客户端直传。
楼上的 1,2 可以用 STS 发 token 解决。
第二点可行,但是第一点有个疑点,比如:我这个 api 可能给合作方或者以后开放给更多人。这时候,调用方就不可控,可能就不愿意自己调用 s3 相关 api (通过 token )上传。
s3 有 pre-signed url
调用你的 api 得到 pre-signed url 然后调用方直接上传,
通过 s3 notification 发通知给 lambda 处理上传结果。
token 有效期很短+只能用一次,颁发 token 时验证调用方

