Resumable and/or accelerated downloads with Elixir?

For resumable downloads, I’d think it could be done with most http clients with a bit of work. For example, with httpoison, you’d write the stream of bytes (stream_to: self() option) to a temporary file and only “save” it (move the temporary file to a “permanent” location similarly to how Plug.Upload works) once the download is complete. If there is already a temporary file when a download process starts, it would read it, calculate the “offset” needed for the range header, and only download what it needs to.

For accelerated downloads, you’d need to split the file into chunks of some configurable size and download each with the “resumable” downloader described above, then cat them into a single file at the final destination …

This is what I’d try before reaching out to rust or porcelain.

1 Like