Use the TarGzUnpacker class to unpack a .tar.gz archive. You can choose between two modes:
- With intermediate file: Uses a temporary file (default is
/tmp/tmp.tar) during the process. - Without intermediate file: Direct expansion (uses more heap memory).
Note: For ESP32, direct expansion from a Stream (like an HTTP stream) is also supported via tarGzStreamExpander.
// mount spiffs (or any other filesystem)
tarGzFS.begin();
TarGzUnpacker *TARGZUnpacker = new TarGzUnpacker();
TARGZUnpacker->haltOnError( true );
TARGZUnpacker->setTarVerify( true );
TARGZUnpacker->setupFSCallbacks( targzTotalBytesFn, targzFreeBytesFn );
TARGZUnpacker->setGzProgressCallback( BaseUnpacker::defaultProgressCallback );
TARGZUnpacker->setLoggerCallback( BaseUnpacker::targzPrintLoggerCallback );
TARGZUnpacker->setTarProgressCallback( BaseUnpacker::defaultProgressCallback );
TARGZUnpacker->setTarStatusProgressCallback( BaseUnpacker::defaultTarStatusProgressCallback );
TARGZUnpacker->setTarMessageCallback( BaseUnpacker::targzPrintLoggerCallback );
// using an intermediate file (default is /tmp/tmp.tar)
if( !TARGZUnpacker->tarGzExpander(tarGzFS, "/targz_example.tar.gz", tarGzFS, "/tmp") ) {
Serial.printf("tarGzExpander+intermediate file failed with return code #%d\n", TARGZUnpacker->tarGzGetError() );
}
// or without intermediate file
if( ! TARGZUnpacker->tarGzExpander(tarGzFS, "/targz_example.tar.gz", tarGzFS, "/tmp", nullptr ) ) {
Serial.printf("tarGzExpander+intermediate file failed with return code #%d\n", TARGZUnpacker->tarGzGetError() );
}