f7160ce416b23cdf8b671e6f0764929ce57746c6
upkg
Go utility packages collection.
file_manager
File management abstraction layer supporting multiple storage backends.
Features
- Local Storage: Store files on local filesystem with manifest-based metadata
- S3 Compatible Storage: Support AWS S3, MinIO, and other S3-compatible services
- SHA256 Verification: Optional file integrity verification
- Automatic Cleanup: Configurable timeout for incomplete uploads and expiration for completed files
- Persistent State: State managed via manifest files (local) or object metadata (S3)
Usage
import "gitea.loveuer.com/loveuer/upkg/controller/file_manager"
Local Storage
fm := file_manager.New(
file_manager.WithDir("/path/to/uploads"),
file_manager.WithTimeout(5*time.Minute),
file_manager.WithExpire(24*time.Hour),
)
defer fm.CloseManager()
S3 Storage
fm := file_manager.New(
file_manager.WithS3(
"http://minio:9000",
"access-key",
"secret-key",
"bucket-name",
"us-east-1",
),
file_manager.WithS3PathStyle(true),
file_manager.WithTimeout(10*time.Minute),
file_manager.WithExpire(48*time.Hour),
)
defer fm.CloseManager()
API
// Create creates a file record, returns code for upload
result, err := fm.Create(ctx, "filename.txt", 1024, "")
// Upload uploads file content
total, written, err := fm.Upload(ctx, code, 0, 1024, reader)
// Get retrieves file content
data, err := fm.Get(ctx, code)
// GetInfo returns file metadata
info, err := fm.GetInfo(ctx, code)
// Delete removes file
err := fm.Delete(ctx, code)
// Close closes file handle
err := fm.Close(code)
// CloseManager shuts down the manager
fm.CloseManager()
Manifest Format (Local)
{
"filename": "file.txt",
"size": 1024,
"sha256": "abc123...",
"path": "/uploads/abc123",
"create_time": "2024-01-01T00:00:00Z",
"complete": true
}
S3 Object Metadata
x-amz-meta-filename: Original filenamex-amz-meta-size: File sizex-amz-meta-sha256: SHA256 hash (optional)x-amz-meta-create-time: Creation timestampx-amz-meta-complete: Upload completion statusx-amz-meta-code: Unique file code
License
MIT
Description
Languages
Go
96%
Shell
2.9%
Dockerfile
1.1%