26.9:直链下载 + 过期回收 + SHA512 去重 + 防盗链 + 媒体预览 + 文件夹上传提示
CI 测试 / go vet + go test (push) Failing after 5s
CI 测试 / go vet + go test (push) Failing after 5s
- 对象存储直链:S3 引擎 302 到限时预签名 URL(有效期钳位分享剩余时效),失败自动回落代理 - 过期回收:janitor 定时扫描 + 取件惰性回收 + 管理端手动触发(POST /admin/recycle/run), retention_days 最长存储时长;删除走引用计数(去重对象安全) - SHA512 内容去重:三条上传链路落库后计算哈希,命中即复用旧对象并删除本次副本 - 下载防盗链:Referer 白名单(同源/空 Referer/通配域名放行),挂 /share/download - 取件页图片/音频内联预览(下载地址直连,加载失败回退下载按钮) - 文件夹上传:拖拽目录明确提示"建议压缩后上传"(webkitGetAsEntry 探测) - 管理端设置卡「回收与下载安全」8 个新配置键(KVSchema + configKeys + UI + i18n) - 前端产物重建并同步 server/web/dist 与 web-embed - 文档:10-config 配置表、03-file-share 直链/防盗链/文件夹章节、07-admin 回收端点、openapi
This commit is contained in:
@@ -101,3 +101,31 @@ curl -s -H 'Range: bytes=0-1023' -o part.bin \
|
||||
```json
|
||||
{ "code": 416, "msg": "请求范围超出文件大小" }
|
||||
```
|
||||
|
||||
## 直链下载(26.9)
|
||||
|
||||
存储引擎为对象存储(S3)且 `direct_download=1` 时,`GET /share/select` 与
|
||||
`GET /share/download` 不再代理文件流,而是 `302` 重定向到限时预签名 URL——
|
||||
文件字节不经过本服务器,带宽成本转嫁对象存储。
|
||||
|
||||
- 签名有效期 = `direct_link_expire`(默认 900 秒)与分享剩余时效的较小值;
|
||||
- 引擎不支持直链(如 local/WebDAV)时自动回落代理下载,取件不中断;
|
||||
- 审计照常记录(`transferred_bytes` 记为文件大小)。
|
||||
|
||||
## 下载防盗链(26.9)
|
||||
|
||||
`hotlink_enabled=1` 时,`/share/download` 校验 `Referer`:
|
||||
|
||||
| Referer | 行为 |
|
||||
|---|---|
|
||||
| 空(直接访问 / curl / 地址栏) | 放行 |
|
||||
| 与请求 Host 同源 | 放行 |
|
||||
| 命中 `hotlink_whitelist`(逗号分隔域名,支持 `*.example.com` 通配) | 放行 |
|
||||
| 其余 | `403`(JSON 错误体) |
|
||||
|
||||
白名单为空时仅同源放行。开关与白名单均为管理端 KV,修改后立即生效。
|
||||
|
||||
## 文件夹上传(26.9)
|
||||
|
||||
不支持文件夹上传(前端已移除目录选择;拖拽目录会提示"建议压缩后上传")。
|
||||
后端 `SanitizeFileName` 会剥离文件名中的路径分隔符,多级路径无法成体保存。
|
||||
|
||||
Reference in New Issue
Block a user