Some checks failed
Release Binaries / Build and Release (.exe, amd64, windows, windows-amd64) (push) Has been cancelled
Release Binaries / Build and Release (amd64, darwin, darwin-amd64) (push) Has been cancelled
Release Binaries / Build and Release (amd64, linux, linux-amd64) (push) Has been cancelled
Release Binaries / Build and Release (arm64, darwin, darwin-arm64) (push) Has been cancelled
Release Binaries / Build and Release (arm64, linux, linux-arm64) (push) Has been cancelled
Backend: - model/meta.go: add MaxDownloads, ExpiresAt, Downloads fields - opt/var.go: add X-Max-Downloads, X-Expires-In header constants; MinExpiresIn=30s, defaults - controller/meta.go: New() accepts maxDownloads+expiresIn; CheckAndIncrDownload() validates expiry/limit and increments counter atomically; periodic cleanup for expired files - handler/share.go: Fetch uses CheckAndIncrDownload (returns 410 on expired/limit exceeded); ShareNew and ShareAPIUpload read X-Max-Downloads/X-Expires-In headers Frontend: - upload.ts: UploadSettings interface; pass X-Max-Downloads and X-Expires-In headers on upload init - panel-left.tsx: collapsible "高级设置" panel with download count (0-999) and expiry (1-24h) controls; show settings summary on upload success card 🤖 Generated with [Qoder][https://qoder.com]
27 lines
668 B
Go
27 lines
668 B
Go
package opt
|
|
|
|
import "path/filepath"
|
|
|
|
const (
|
|
Meta = ".meta."
|
|
HeaderSize = "X-File-Size"
|
|
HeaderMaxDownload = "X-Max-Downloads"
|
|
HeaderExpiresIn = "X-Expires-In"
|
|
CodeLength = 8
|
|
|
|
// MinExpiresIn is the minimum allowed expiry in seconds (30s for testing).
|
|
MinExpiresIn = 30
|
|
// DefaultExpiresIn is the default expiry in seconds (8 hours).
|
|
DefaultExpiresIn = 8 * 3600
|
|
// DefaultMaxDownloads is the default max download count (0 = unlimited).
|
|
DefaultMaxDownloads = 3
|
|
)
|
|
|
|
func FilePath(code string) string {
|
|
return filepath.Join(Cfg.DataPath, code)
|
|
}
|
|
|
|
func MetaPath(code string) string {
|
|
return filepath.Join(Cfg.DataPath, Meta+code)
|
|
}
|