无登录单页视频合并WebApp多用户文件隔离与清理方案咨询
无登录多用户视频合并方案
1. 给每个用户分配临时唯一标识
- 用户打开页面时,前端直接生成一个UUID(用浏览器自带的
crypto.randomUUID()即可),存在localStorage里,后续所有请求都带上这个ID。若担心前端生成的安全性,也可以让后端在用户第一次发起请求时生成ID并返回给前端,存在前端存储中。
2. 基于临时ID创建专属文件夹
- 用户上传视频时,后端根据这个ID创建独立的临时文件夹,比如
temp_videos/xxxx-xxxx-xxxx/,该用户所有上传的文件都存入此文件夹。合并视频时直接读取该文件夹内的文件,完全避免与其他用户的文件混淆。
3. 自动清理过期文件
- 给每个临时文件夹设置过期时间,比如用户完成合并后1小时,或24小时无操作就删除。可以用定时任务(比如Linux的
cron、Node.js的node-schedule)定期扫描临时目录,删除超期的文件夹。也可以在用户下载完合并后的视频后,让前端发送请求通知后端直接删除该用户的临时文件夹。
4. 前端请求传递标识
- 上传、合并、清理的所有API请求,要么把ID放在请求参数里,要么塞进请求头中,后端通过这个ID定位到对应的文件夹。举个前端上传的示例:
const tempUserId = localStorage.getItem('tempUserId') || crypto.randomUUID(); localStorage.setItem('tempUserId', tempUserId); const formData = new FormData(); formData.append('video', file); formData.append('tempUserId', tempUserId); fetch('/upload', { method: 'POST', body: formData });
5. 额外防坑优化
- 限制每个临时文件夹的文件数量和总大小,防止恶意用户上传大量文件占用服务器资源。
- 如果用户清除了浏览器缓存,再次打开页面会生成新ID,之前的文件夹会被定时任务自动清理,不会影响其他用户的使用。
内容的提问来源于stack exchange,提问作者M Schm
相关产品推荐
相关产品推荐

