网站开发小白设想了一个存储在 s3 上的静态照片/视频网站,仅供家人访问,请问是否可行?

101 天前
 levelworm

我从来没做过网站开发,最近在看 s3 的文档的时候,发现可以直接在上头 host 静态网站,同时可以用 policy 限制访问白名单,于是有了一个构建照片/视频网站的偷懒的想法。

s3 的结构大致是这样的:

.../my-static-website/webpage/ -> 这里存储的是网页的 html 和脚本(我也没做过网站开发,不知道需要多少脚本)

.../my-static-website/photo/ -> 这里存储的是所有照片和视频,底下还有多余的 yyyy-mm-dd 前缀,比如说.../my-static-website/photo/2025-06-01/photo1.jpg

用白名单策略来限制家人的访问,需要他们的公开 ip 。我感觉这里比较粗糙,因为他们的 ip 很可能经常变化,但是反正就那几个人,直接让他们访问一个给出访问者公网 ip 的网站,把结果告诉我,我手动修改策略就行了。具体如何自动化还没想好,我觉得如果做成手机 apk ,让 app 检测手机的公网 ip ,然后自动更新策略,也应该可行。

主页的内容大致是:

就是一张最简单的网页,上面罗列了每个 yyyy-mm-dd 前缀,点进去可以访问一个直接动态生成的、以 yyyy-mm-dd.html 为名字的网页,上面罗列了每个.../my-static-website/photo/yyyy-mm-dd/ 目录下面的图片和视频的缩略图(每一天应该不会超过 10 个物体),再点就可以直接在浏览器中打开图片和视频。

yyyy-mm-dd 的列表应该可以从 s3 里的前缀中获取,至于如何自动生成网页,我从来没开发过网页,但是想来应该不会太难,可能要写点 javascript 。

主页上还有一个“上传”按钮,访问者可以点击然后上传文件,直接自动存储到以当天为前缀的 s3 文件里,比如说 2025-06-01 上传,那么直接就进到.../my-static-website/photo/2025-06-01/ 下面。这个估计要修改策略,目前还不知道行不行,得看看文档。“上传”本身肯定也是需要一个脚本的,到时候查查看怎么写。

整个“产品”就是这样了。使用者不会超过 10 人,他们对界面也无所谓,最重要的是能看到儿子照片和视频。大家觉得可行性如何?安全性的话,如果白名单策略有效的话,还会有什么漏洞吗?

多谢!

4476 次点击
所在节点    程序员
60 条回复
SeaTac
101 天前
为啥不用正常的照片分享服务呢 比如 iCloud
levelworm
101 天前
@SeaTac #1
我还真没这个,目前的 google photo 空间不够,得买。

我还不知道 s3 存储的费用,我找找看。
duzhuo
101 天前
@levelworm 你可以用 Cloudflare R2 存 10GB 以下免费
levelworm
101 天前
@duzhuo 多谢,这个空间估计不够,我已经有 20gb 了,我看看多出来的如何计费。另外就是能不能在 CF 上 host 静态网页。
cue
101 天前
s3 存储只能存原图,你这样的随便加载一下就几个 G 了,钱包根本齁不住,存储费用+CDN 费用+图像处理费用,你就知道云盘的好了。
abc612008
101 天前
喜欢 self hosted 的话可以看 https://immich.app/之类的。公网 IP 可能是 nat 过的,别人也可能会有权限访问。一直需要改的话使用体验也不大好。缩略图的话需要专门生成适用于缩略图的小图片。
duzhuo
101 天前
@levelworm 我觉得不如部署动态网站了,考虑一下 Cloudflare Workers 或者 Vercel 这种 免费的 Serverless 服务。你还可以更好搞鉴权(比如第三方登录或者单纯的账号密码)而不是访问 IP 白名单。
facebook47
101 天前
这个网站不难,但是有一点,就是在线看视频,这个对带宽有要求,这就对服务器有要求了,这个不便宜
cj323
101 天前
可以。我已经能想象到楼主给家人分发 apk 时满满的成就感了,家人也会感受到楼主的心意。
billccn
101 天前
IP 白名单的话等于也对运营商、网安、墙等都白名单了。另外现在独立 IP 很少了,不排除运营商的 NAT 的 IP 地址会经常变换,楼主人工操作感觉不实际。

如果你和客户之间有可信度通信方式的话(不是微信之类要上报的),可以用 Pre-signed URL ,就是 URL 内嵌入授权。要不然可以在把对象储存藏在一个支持访问控制的 CDN 后面,比如 Cloudflare Access 。
Actrace
101 天前
为啥不用钛盘直链?
levelworm
101 天前
@cue #5
多谢,看了朋友们的回复,我觉得我想的还是太简单了。。。
levelworm
101 天前
@duzhuo #7
多谢!我研究一下~~自己在这块的确是什么也不懂。
levelworm
101 天前
@billccn #10
多谢这些我都不懂,多谢坛贤提醒。
levelworm
101 天前
@facebook47 #8
多谢,看来我还是考虑少了,我看很多朋友推荐 CF ,我去研究一下。
levelworm
101 天前
@cj323 #9
多谢鼓励,没有朋友们提醒我是真不懂。
webs
101 天前
这个得禾斗学上网,才能稳定访问 S3 吧,得加钱
Aicnal
101 天前
文件名可以用 sha 进行加密
但是 s3 你要是在公网中访问 得设置好桶策略或者是预签名
直接用框架的 fileserver 可能更好我觉得
linuxsir2020
101 天前
NAS .../doge
cpstar
101 天前
上 HTTPS 并且加自定义 HEADER 就可以搞定 IP 的问题。但是这么一整套下来,完全是脱裤子放屁,显然有别的便捷的方案。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1137115

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX