我可以把文件存到 S3、GCS 或 Google Drive,而不是服务器上吗?
不能直接这样做。Frappe 没有内置的设置可以把新上传的附件发送到
Amazon S3、Google Cloud Storage (GCS) 或 Google Drive。用户通过附件对话框上传的每个文件
都会保存到站点的本地文件存储中,而不是外部对象存储。
提出这个问题最多的,通常是附件增长很快的团队,比如扫描的收据、客户上传的视频或产品图片,
他们希望在站点磁盘空间用完之前把这些文件转移出去。
为什么没有这个功能
Frappe 的文件存储出于速度和简洁性的考虑,设计上就是直接写入本地磁盘。要把新上传的文件
发送到外部对象存储,需要改变 Frappe 读写文件的方式,而不仅仅是一个设置,所以目前没有
受支持的方法来实现这一点。
Frappe Framework 中的 Google Drive 集成经常被误认为是这个功能。其实不是一回事:
它只能让你浏览自己的 Google Drive,并为那里已经存在的文件附加一个链接。
它不会改变用户新上传文件的存储位置,也不会把站点已有的文件移到 Drive 中。
最接近的办法
如果文件已经存在于 Frappe 之外
如果文件已经托管在 S3、GCS、Google Drive 或任何其他服务上,可以附加一个链接,
而不是上传一份副本:
- 打开文档,在侧边栏中进入 附件。
- 点击 +,然后选择 链接。
- 把文件的 URL 粘贴到 附加网页链接 中,然后点击 上传。
Frappe 存储的是链接而不是文件,所以这个附件不占用站点的任何存储空间。
如果你希望新上传的文件自动存到 S3
有一个社区维护的应用市场应用 Frappe S3 Attachment,可以把新上传的文件重定向到 S3
存储桶。它不是由 Frappe 开发或维护的:
- Frappe 支持团队无法排查该应用中的问题,也无法保证它能与你的站点版本兼容。
安装前请查看该应用自己的页面,了解它目前支持哪些 Frappe 版本。 - 它是针对 AWS S3 开发和测试的。像 Oracle Object Storage 或 MinIO 这样的 S3 兼容服务商
可能可以用相同的存储桶名称、访问密钥、密钥、区域和自定义端点 URL 来运行,
但这并未得到确认,出现的任何问题都需要你自己解决。
这个变通方法的局限
- 两种方案都不能自动生成文件夹结构,比如按文档类型、客户或日期分类。
这需要通过 Frappe 合作伙伴或你自己的团队进行定制开发。 - 网页链接方案只适用于你已经托管在别处的文件。它不会减少已经上传到 Frappe 的文件
所占用的空间。 - 如果团队很在意把文件存储从服务器上移走,可以在 GitHub 上提交功能请求,
或者在社区论坛中询问是否已有其他开发者构建了可以复用的东西。
相关内容
- 附件
- Google Drive
- 将备份上传到 Amazon S3