January 26, 2026

Bytes, fights, and grammar rights

Transfering Files with gRPC

gRPC vs REST: Big file showdown as devs roast, link, and nitpick

TLDR: The post compares file transfers via REST streaming versus gRPC chunking. Commenters push Google’s ByteStream standard, suggest hybrid setups with S3 links for the actual data, and gripe that gRPC makes streaming harder — while one hero corrects “transferring,” proving even spelling is part of the battle.

The blog asks a simple question — should you move big files over gRPC (Google’s remote-call tech) or keep it classic with REST (plain web requests)? The author demos both: REST streams the file straight to the browser, while gRPC chops it into small chunks because big messages don’t fit. That sparked a lively comments section where the crowd brought receipts, standards, and sass.

First, the standards squad rolled in with Google’s ByteStream proto, claiming it’s the grown‑up way to do this, complete with resume support and starting mid-file. Others dropped “oh, and this exists too” links like rsync-over-gRPC, because nothing says tech debate like three more protocols. The hottest take? One dev vented that gRPC ironically drops raw streaming, forcing everyone to re-invent it on top — drama!

Pragmatists chimed in with the hybrid play: use gRPC for metadata (names, checksums) while the actual file bytes go via presigned Amazon S3 links. Translation: let the web do web things, let gRPC do control.

And yes, someone showed up just to correct the spelling of “transferring.” The grammar police made an arrest, and the thread cheered. Overall vibe: REST folks say “keep it simple,” gRPC fans say “do chunks or use ByteStream,” and everyone agrees: never base64 a giant file, unless you enjoy pain.

Key Points

  • Large file transfers should stream data to avoid buffering entire files in memory and potential out-of-memory errors.
  • REST/HTTP can handle resumable downloads via the HTTP Range header; resumability with gRPC is acknowledged but not covered here.
  • Embedding file content in JSON using Base64 increases payload size by ~30% and often forces full memory buffering.
  • In ASP.NET Core (C#), returning PhysicalFileResult streams a file directly from the file system with metadata via HTTP headers.
  • gRPC buffers individual messages; large files must be sent via server-streamed multiple small protobuf messages (e.g., ~32 KB chunks) using a schema that includes metadata and data chunks.

Hottest takes

"is a more complete version of this. It supports resumable uploads, and the download can start from an offset within a file," — sluongng
"It works, but is a bit of work, and I really don’t love how you’re building on top of a protocol that completely solves streaming contents of arbitrary size, which gRPC drops" — CamouflagedKiwi
"we used gRPC for metadata and presigned S3 URLs for the actual bytes." — augusteo
Made with <3 by @siedrix and @shesho from CDMX. Powered by Forge&Hive.