问题描述
在项目中有些情况下,我想在模型上存储图像。
例如:
- 公司徽标
- 个人资料图片
- 编程语言
- 等等。
最近我一直在使用AWS S3通过ImageField上传文件存储(主要是托管在Heroku上)。
我觉得有一种比以往更好的存储文件的方式。
对于某些事情(例如上述示例),我认为实际上只是从更公开的URL获取图像URL而不是占用我自己的数据库中的空间。
对于Django社区中已经建立并部署了真正专业项目的专家,您通常是否通过ImageField将文件直接存储到Django媒体文件夹中?
还是通常使用URLField,然后从API提取URL或从网络获取图像链接(例如,转到任何Google图像,右键单击并复制,然后粘贴图像URL)?
奖金:您的图像存储设置是什么样的?
希望这是有道理的。
谢谢!
解决方法
该标准就是您所描述的,使用AWS S3之类的东西来存储实际图像并处理数据库中的URL。原因如下:
- 便宜。就像真的便宜
- 您无需将Web服务器提供文件,而是将其卸载到客户端(例如,其浏览器从S3抓取文件)
- 如果您使用的是临时系统(例如Heroku),则唯一的选择就是使用S3之类的东西。
- 控制。当然,您可以从不受您管理的其他位置拉取图像链接。但这没有规模。如果该服务器离线,会发生什么?如果他们把这张照片记下来怎么办?这样,您可以控制对象发生什么情况。
VSCO是一个不错的大型互联网公司的示例,但规模不足以运行自己的基础架构(如Facebook / Instagram,Google等)。他们每天要上传大量的照片,并使用AWS进行处理。