CASE STUDY A2 · Tool

Browser SFTP

A file manager for your server, in a browser tab.

Web-based SFTP client: browse, upload, download, and manage files on remote servers from the browser, with real-time transfer progress over Socket.IO.

O(1)

memory per transfer, any file size

THE PROBLEM

Sometimes you need to move one file onto a server from a machine that has no terminal, no keys configured, and no FileZilla — just a browser.

WHAT I BUILT

A Node.js service that bridges browser to SFTP: a clean file-manager UI in front, an SSH/SFTP session behind, with uploads and downloads streaming through and progress reported live over Socket.IO.

ARCHITECTURE

browser UI ──Socket.IO──► Node/Express ──SFTP──► remote server
              (progress events)      (streamed transfers)
  • Transfers stream end-to-end — the service never buffers whole files, so a 2GB upload uses the same memory as a 2KB one.

STACK — AND WHY

Node.js + Express

SSH/SFTP client libraries and streaming are mature here.

Socket.IO

Transfer progress as live events.

THE HARD PARTS

Streaming without buffering

Browser → HTTP → SFTP as one pipeline with backpressure respected at each hop; the naive version reads the whole file into memory and dies on the first ISO.

WHAT IT TAUGHT ME

  • Backpressure is not optional. Every hop in a streaming pipeline must be allowed to say 'slow down.'
← Back to the descent