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.