Handling fs
This commit is contained in:
@@ -2,7 +2,7 @@
|
||||
|
||||
A minimal, self-hosted private file hosting service built with **Bun** and
|
||||
**TypeScript**. Upload a file, get a secret, unguessable download link. Files are
|
||||
stored on the local filesystem and expire after one week.
|
||||
stored on the local filesystem and expire after 48 hours.
|
||||
|
||||
Everything lives on disk — the filesystem is the source of truth. There is no
|
||||
database, no object storage, and no queue. Expired files are swept automatically.
|
||||
@@ -15,7 +15,7 @@ database, no object storage, and no queue. Expired files are swept automatically
|
||||
- A cryptographically secure, unguessable download key for every file.
|
||||
- Streaming uploads and downloads — no full buffering in RAM, large files work.
|
||||
- Configurable maximum upload size (`413` when exceeded, default 10GB).
|
||||
- Files **auto-expire after one week** and are removed automatically.
|
||||
- Files **auto-expire after 48 hours** and are removed automatically.
|
||||
- Authenticated deletion (possession of the file's secret key is required).
|
||||
- Rate-limited download/delete endpoints to blunt brute force.
|
||||
- Zero runtime dependencies (Bun is the only runtime).
|
||||
@@ -49,7 +49,8 @@ cp .env.example .env
|
||||
| `PORT` | `3000` | Bind port. |
|
||||
| `STORAGE_DIR` | `./storage` | Directory where files + metadata are stored (relative to CWD). |
|
||||
| `MAX_FILE_SIZE` | `10GB` | Max upload size. Units: `B`, `KB`, `MB`, `GB`, `TB` (or plain int). |
|
||||
| `FILE_TTL_MS` | `604800000` | Milliseconds before an upload expires and is deleted (1 week). |
|
||||
| `MAX_STORAGE_USAGE` | `0.5` | Max fraction (0.0–1.0) of the storage disk that may be used; uploads are rejected with `503 try again later` above this. |
|
||||
| `FILE_TTL_MS` | `172800000` | Milliseconds before an upload expires and is deleted (48 hours, hard maximum). |
|
||||
| `RATE_LIMIT_ENABLED` | `1` | Enable per-IP rate limiting on `/(key)` and `/api/files/`. |
|
||||
| `RATE_LIMIT_MAX` | `300` | Max requests per IP per window. |
|
||||
| `RATE_LIMIT_WINDOW_MS` | `60000` | Rate-limit window length in ms. |
|
||||
@@ -73,7 +74,7 @@ Then open http://localhost:3000.
|
||||
4. Copy the URL. Anyone possessing it can download the file — **after entering
|
||||
the password you set at upload**. Nobody without the secret URL and the
|
||||
password can download it.
|
||||
5. The file is removed automatically after one week, or earlier by explicit
|
||||
5. The file is removed automatically after 48 hours, or earlier by explicit
|
||||
deletion.
|
||||
|
||||
## Filesystem layout
|
||||
|
||||
Reference in New Issue
Block a user