Files
FTP/README.md
asabizanjo 423ce1bc6d gucci
2025-12-11 01:05:24 +00:00

1.6 KiB

Cloudflare R2 File Drive

A simple FTP-style web UI built with Next.js App Router. Users can register/login (email + password), upload files or entire folders, list them, download via signed URLs, and delete. Files are stored in Cloudflare R2 (S3-compatible); metadata and users are stored in SQLite via Prisma.

Setup

  1. Install deps (already checked in package-lock.json):
npm install
  1. Copy env.example to .env.local (or set env vars another way) and fill:
  • DATABASE_URL="file:./dev.db" (default SQLite)
  • R2_ENDPOINT="https://<account-id>.r2.cloudflarestorage.com"
  • R2_REGION="auto"
  • R2_ACCESS_KEY_ID, R2_SECRET_ACCESS_KEY
  • R2_BUCKET
  • JWT_SECRET (long random string)
  • PORT / NEXT_PORT (defaults set to 4000 to avoid 3000)
  1. Create DB & Prisma client:
npx prisma db push
npx prisma generate
  1. Run dev server on port 4000:
npm run dev
# overrides: PORT=4500 npm run dev
  1. Production:
npm run build
PORT=4000 npm run start

Usage

  • Register or log in at /register or /login.
  • Dashboard at /dashboard:
    • Upload files or folders (uses webkitdirectory; folder structure is preserved in keys).
    • Files are stored under a user-specific prefix in R2; metadata kept in SQLite.
    • Download uses short-lived signed URLs; delete removes from R2 and DB.

Notes

  • Middleware protects /dashboard and /api/files/*; auth cookie is HttpOnly JWT.
  • To change ports, set PORT/NEXT_PORT or pass -p to scripts; defaults avoid 3000.
  • R2 endpoint format: https://<account-id>.r2.cloudflarestorage.com.