A file implementation for remote assets
This library provides a way to visit a file over HTTP, mimicking the behavior of the standard library's File
type.
Highlights
- Supports
AsyncRead
andAsyncSeek
traits fromtokio
. - Uses HTTP Range requests to fetch data.
stream_position()
is cheap, as it is tracked locally.- Exposes reqwest's Error through
std::io::Error::Other
. - Handles transient network errors with retries(currently is a simple retry of 3 attempts).
Example
use HttpFile;
use ;
use Client;
async
Notes
- The
HttpFile
itself will try to make as few network requests as possible, i.e., it will not make a new request if the seek position is the same as the current position. - Keep in mind that seeking in a remote file is not as efficient as seeking in a local file, as it requires additional network requests, which brings orders of magnitude more latency. If you need to perform small seeks frequently, consider reading a larger chunk of data into memory and seeking within that buffer instead.
- It does not implement caching, if you need caching, consider wrapping it to a new type and implementing your own caching logic.
- It does not implement
AsyncWrite
, as writing to a remote file over HTTP is not supported.
Plans
- Supports more protocols, e.g., FTP, S3, etc.
- Implement caching layer.
- More robust retry mechanism.