Chunked upload
The browser slices the file and the server appends chunks, never reading the whole file into memory.
AetherUpload / PHP + Rust
Slicing, resume, instant upload, dedup, and checks share one path; the file never enters memory.
The browser slices the file and the server appends each chunk; naming the finished file by md5 unites upload, resume, instant upload, dedup, and integrity checks.
The core reaches host capabilities through Runtime; config, routes, commands, language files, and frontend scripts ship per host, and one codebase runs on nine hosts.
A cloudlike Aether Beast: an upward upload arrow above its head, a belly progress bar for chunked upload progress, and a dashed trail of chunks flying in from the right.
Slice the big file, send it up chunk by chunk.From browser slicing to the final file on disk, every step has a mechanism.
The browser slices the file and the server appends chunks, never reading the whole file into memory.
Retries on weak networks skip chunks already written and fill in only the missing ones.
A matching md5 hits an existing finished file, and not a single chunk is transferred.
The final chunk rechecks size and MIME, recomputes the whole md5, and only then commits the file.
A built-in zero-dependency S3 client switches between local disk and object storage.
One core runs under webman, native PHP, and seven frameworks.
Beyond the PHP version, a Rust implementation is also available.
Same upload semantics in Rust
Brings slicing, resume, instant upload, dedup, and integrity checks to Rust across eight frameworks, with zero third-party dependencies by default.
Four releases that fully decoupled the upload core from the host framework.
Fixes the adapter fallback binding missed by Install::uninstall() when the webman package is removed.
Adds a native PHP adapter, verified end to end with php -S and curl, with no framework required.
The core is decoupled from hosts, with seven host adapters and 12 language docs landing together.
Fixes instant upload, console commands, and input boundaries, and adds 42 regression tests.
Click an image to enlarge.
Install first, then run a minimal example.
composer require erikwang2013/aetherupload-webmanrequire __DIR__ . '/../vendor/autoload.php';
exit(\AetherUpload\Adapter\Native\Bootstrap::handle([
'base_path' => dirname(__DIR__),
'config' => require __DIR__ . '/../config/aetherupload.php',
]));cargo add aetherupload-rust --features axumuse std::sync::Arc;
use aetherupload::{Config, Runtime};
let runtime = Arc::new(Runtime::new(Config::default(), ".")?);
let app = aetherupload::integrations::axum::routes(runtime);Hover for a moment and its mood changes.