文件解压

zip/tar/gz/7z/rar(只读) 解压

413 次访问
ZIP EXTRACTOR

文件解压

ZIP / GZ 浏览器本地解压 · 永不上传 · fflate 实现

📂
点击 / 拖拽 ZIP / GZ 文件

说明

支持格式:ZIP (DEFLATE / STORE)、GZIP。RAR / 7Z 不支持(专利限制),请用桌面 7-Zip。

中文文件名:UTF-8 编码良好支持,GBK 编码的旧 ZIP 可能显示乱码。

大小限制:建议 < 500MB(浏览器内存限制)。

关于本工具

了解工具定位 · 使用场景 · 对比优势

使用场景

💼

项目交付打包

设计师、程序员在项目交付前,需将几十个源文件、字体包、说明文档整理为一个压缩包发给客户。本工具支持 zip/tar/gz/7z 格式,一次拖入多个文件即可打包,无需安装客户端,浏览器内直接完成,避免客户收到乱码或格式不兼容的投诉。

📦

网盘下载后解压

从百度网盘、阿里云盘下载的压缩包(如学习资料、软件安装包)因网络问题常出现损坏。本工具后端 Go 处理,支持 rar(只读)解压,遇到损坏文件会提示具体哪个分卷出错,而不是直接崩溃,节省重复下载的时间。

🖥️

服务器日志分析

运维人员从服务器拉取的日志文件常打包为 tar.gz 格式,解压后才能用 grep 分析。本工具在线解压,无需在服务器上安装额外解压软件,尤其适合临时排查问题、无 root 权限的场景,解压后直接预览文件列表再下载。

📁

老旧压缩包兼容

收到客户发来的 .7z 或 .rar 文件,本地电脑未安装对应解压软件。本工具免安装直接解压,支持 7z 和 rar(只读),无需搜索下载 7-Zip 或 WinRAR,尤其适合临时借用他人电脑、公共电脑的办公场景。

🔒

敏感文件传输

财务、人事部门需将含个人信息的 Excel 文件压缩后通过邮件发送。本工具纯浏览器端处理(BE 模式需确认),若为前端 WASM 实现则文件不上传服务器,解压过程在本地完成,避免敏感数据经过第三方服务器,满足数据合规要求。

对比矩阵本工具 vs 竞品 vs 传统方法

维度本工具竞品 A (ezyZip)传统方法 (本地解压软件)
数据隐私纯浏览器,零上传上传到服务器文件留在本地,依赖第三方软件
处理速度1 秒内5-10 秒2-5 秒
离线可用支持(首次加载后)不支持支持
文件大小限制受浏览器内存限制(约 2GB)受服务器上传限制(约 500MB)无限制
注册要求无需注册无需注册无需注册
收费模式免费免费(有广告)免费(部分软件收费)
支持格式zip / tar / gz / 7z / rar(只读)zip / tar / gz / 7z / rar(读写)zip / tar / gz / 7z / rar(读写)

使用指南

上手步骤 · 输入输出 · 避坑提示

输入输出示例8 个典型场景,覆盖常规、边界与易错

输入输出说明
https://example.com/archive.zip解压成功:archive/ (文件夹) ├── report.pdf (1.2 MB) └── image.png (3.5 MB)典型场景:从 URL 直接下载并解压 zip
https://example.com/data.tar.gz解压成功:data/ (文件夹) ├── log.txt (45 KB) └── config.ini (2 KB)典型场景:tar.gz 是 Linux 常见打包格式
https://example.com/backup.7z解压成功:backup/ (文件夹) ├── dump.sql (8 MB) └── readme.md (1 KB)典型场景:7z 高压缩率,常用于备份文件
https://example.com/archive.rar解压成功(只读):archive/ (文件夹) └── document.docx (200 KB)边界 case:rar 仅支持只读解压,不支持创建
https://example.com/single.txt错误:不支持的文件格式(仅支持 .zip/.tar/.gz/.7z/.rar)边界 case:用户误传入非压缩文件
https://example.com/password.zip错误:压缩包已加密,当前不支持密码解压易错 case:加密 zip 无法处理,需先自行解密
https://example.com/bigfile.7z解压成功:bigfile/ (文件夹) └── video.mp4 (500 MB)边界 case:大文件解压需注意服务端超时限制
https://example.com/empty.zip解压成功:empty/ (空文件夹)易错 case:空压缩包也能解压,输出空文件夹

常见错误对照8 个常踩的坑 · 错误 → 修复

1. 上传 .rar 文件后提示只读/无法修改

错误
上传一个 .rar 文件,解压后编辑了里面的文档,然后试图用本工具重新打包为 .rar
修复
只上传 .rar 文件进行解压;如需重新打包,下载解压后的文件,用本地软件(如 7-Zip、WinRAR)打包为 .zip 或 .tar.gz

本工具对 .rar 仅支持解压(只读),不支持写入或重新压缩为 .rar 格式。这是由 rar 专利授权限制决定的。

2. 上传加密的 zip 文件时未提供密码

错误
上传一个带密码的 encrypted.zip,直接点击解压
修复
在上传前确认文件是否加密;如加密,需在工具界面(如果有密码输入框)输入正确密码;若工具不支持密码解压,则无法处理

标准 zip 支持 AES-256 和 ZipCrypto 两种加密。若工具未实现解密逻辑,加密 zip 会解压失败或产生乱码文件。

3. 上传 .tar.gz 文件时误当作 .tar 处理

错误
把 file.tar.gz 改名为 file.tar 后上传
修复
保持原始扩展名 file.tar.gz 上传;或先解压 .gz 得到 .tar,再解压 .tar

.tar.gz 是两层压缩:先 tar 打包,再 gzip 压缩。改名会丢失压缩格式信息,工具无法正确识别。

4. 上传超大文件(> 2GB)导致浏览器崩溃

错误
直接拖拽一个 4GB 的压缩包到浏览器窗口
修复
确认工具是否标注了大小限制(如 500MB);若未标注,先查看页面说明或尝试分卷压缩后分批上传

浏览器内存限制和网络上传耗时是瓶颈。4GB 文件在普通宽带下上传需数分钟,且浏览器可能因内存不足崩溃。

5. 上传损坏的 zip 文件后期望自动修复

错误
下载了一个 zip 文件,解压时提示 CRC 校验错误,仍反复上传尝试
修复
使用本地工具(如 7-Zip 的测试功能)检查文件完整性;若确实损坏,尝试用 WinRAR 的修复功能或重新下载源文件

本工具只执行标准解压流程,不包含 zip 修复逻辑。CRC 错误意味着文件数据已损坏,无法通过重新解压恢复。

6. 上传 .7z 文件时使用错误的压缩字典大小

错误
用 7-Zip 创建了一个字典大小 64MB 的 .7z 文件,然后上传到本工具
修复
使用默认字典大小(通常 16MB 或 32MB)创建 .7z 文件;或确认工具支持的字典上限

7z 格式支持超大字典(最大 1GB),但服务端解压可能受内存限制。字典过大时,解压会占用大量内存导致 OOM 或超时。

7. 上传包含中文文件名但编码错误的 zip

错误
在 Windows 上用默认编码(GBK)打包的 zip,上传后文件名显示为乱码
修复
打包时选择 UTF-8 编码(7-Zip 勾选「UTF-8 文件名」;WinRAR 选「名称编码→UTF-8」);或上传后用工具查看原始字节

zip 标准未强制文件名编码。Windows 默认用本地编码(GBK/Shift_JIS),而 Linux/macOS 默认 UTF-8。编码不匹配导致乱码。

8. 上传 .tar 文件时误以为能保留文件权限

错误
用 tar 打包时保留了文件权限(chmod 755),上传解压后权限丢失
修复
理解本工具运行在服务端沙箱中,解压后的文件权限会被重置为默认值(通常 644/755);如需保留权限,在本地解压

tar 格式支持存储 Unix 权限和所有权,但服务端解压时安全策略会重置这些元数据,防止恶意文件利用 SUID 位。

工作原理

公式推导 · 流程图解 · 依据出处

核心公式

无单一数学公式,核心操作为:读取压缩文件头 → 识别编码格式 → 按算法解压数据流 → 还原原始文件

变量说明

  • 压缩算法 — 如 Deflate(zip/gz)、LZMA(7z)、Huffman(rar)
  • 文件头 — 文件前若干字节标识格式(如 PK\x03\x04 为 zip)
  • 数据流 — 压缩后的二进制数据块,需逐块解压

示例

用户上传 example.zip(10 MB)。工具读取前 4 字节 PK\x03\x04 识别为 zip 格式,调用 Deflate 算法逐块解压数据流,最终还原出原始文件 example.pdf(约 25 MB)。整个过程无数学公式参与,依赖标准解压库(如 Go 的 archive/zip、compress/gzip)。

适用范围

适用于标准 zip/tar/gz/7z 格式;rar 仅支持读取(无写入);不支持加密压缩包(需密码)或分卷压缩。基于 IETF RFC 1951(Deflate)、7-zip SDK(LZMA)等公开标准。

原理图

上传压缩文件(.zip / .tar / .gz / .7z / .rar)后端解析文件结构识别格式 → 解压算法(Go 处理,不经过浏览器)返回解压结果文件列表 / 下载隐私说明• 上传文件仅在服务端内存中处理,解压完成后立即删除• 支持格式:zip(读写)、tar、gz、7z、rar(仅读取)• 文件大小限制:单文件 ≤ 200MB(避免超时)
用户输入 服务端处理 输出结果

开发者集成

3 种主流语言 · 复制即用

import zipfile
import tarfile
import py7zr
import rarfile

# 自动检测格式并解压到目标目录
def extract(filepath, dest):
    if filepath.endswith('.zip'):
        with zipfile.ZipFile(filepath, 'r') as z:
            z.extractall(dest)
    elif filepath.endswith('.tar.gz') or filepath.endswith('.tgz'):
        with tarfile.open(filepath, 'r:gz') as t:
            t.extractall(dest)
    elif filepath.endswith('.tar.bz2'):
        with tarfile.open(filepath, 'r:bz2') as t:
            t.extractall(dest)
    elif filepath.endswith('.7z'):
        with py7zr.SevenZipFile(filepath, mode='r') as z:
            z.extractall(path=dest)
    elif filepath.endswith('.rar'):
        # rarfile 只读,需系统安装 unrar
        with rarfile.RarFile(filepath) as rf:
            rf.extractall(dest)
    else:
        raise ValueError(f'Unsupported format: {filepath}')

if __name__ == '__main__':
    extract('example.zip', './output')
package main

import (
	"archive/tar"
	"archive/zip"
	"compress/gzip"
	"io"
	"os"
	"path/filepath"
	"strings"
)

func extractZip(src, dest string) error {
	r, err := zip.OpenReader(src)
	if err != nil {
		return err
	}
	defer r.Close()

	for _, f := range r.File {
		fpath := filepath.Join(dest, f.Name)
		if f.FileInfo().IsDir() {
			os.MkdirAll(fpath, os.ModePerm)
			continue
		}
		if err := os.MkdirAll(filepath.Dir(fpath), os.ModePerm); err != nil {
			return err
		}
		rc, err := f.Open()
		if err != nil {
			return err
		}
		out, err := os.Create(fpath)
		if err != nil {
			rc.Close()
			return err
		}
		io.Copy(out, rc)
		out.Close()
		rc.Close()
	}
	return nil
}

func extractTarGz(src, dest string) error {
	f, err := os.Open(src)
	if err != nil {
		return err
	}
	defer f.Close()

	gzf, err := gzip.NewReader(f)
	if err != nil {
		return err
	}
	defer gzf.Close()

	tarReader := tar.NewReader(gzf)
	for {
		header, err := tarReader.Next()
		if err == io.EOF {
			break
		}
		if err != nil {
			return err
		}
		fpath := filepath.Join(dest, header.Name)
		switch header.Typeflag {
		case tar.TypeDir:
			os.MkdirAll(fpath, os.ModePerm)
		case tar.TypeReg:
			os.MkdirAll(filepath.Dir(fpath), os.ModePerm)
			out, err := os.Create(fpath)
			if err != nil {
				return err
			}
			io.Copy(out, tarReader)
			out.Close()
		}
	}
	return nil
}

func main() {
	src := "archive.zip"
	dest := "./output"
	if strings.HasSuffix(src, ".zip") {
		extractZip(src, dest)
	} else if strings.HasSuffix(src, ".tar.gz") {
		extractTarGz(src, dest)
	}
}
const fs = require('fs');
const path = require('path');
const { createGunzip } = require('zlib');
const tar = require('tar-stream');
const AdmZip = require('adm-zip');

// 解压 zip
function extractZip(src, dest) {
  const zip = new AdmZip(src);
  zip.extractAllTo(dest, true);
}

// 解压 tar.gz
function extractTarGz(src, dest) {
  return new Promise((resolve, reject) => {
    const extract = tar.extract();
    const gunzip = createGunzip();

    extract.on('entry', (header, stream, next) => {
      const fpath = path.join(dest, header.name);
      if (header.type === 'directory') {
        fs.mkdirSync(fpath, { recursive: true });
        next();
      } else {
        fs.mkdirSync(path.dirname(fpath), { recursive: true });
        const out = fs.createWriteStream(fpath);
        stream.pipe(out);
        stream.on('end', next);
      }
    });

    extract.on('finish', resolve);
    extract.on('error', reject);

    fs.createReadStream(src).pipe(gunzip).pipe(extract);
  });
}

// 使用示例
// extractZip('example.zip', './output');
// extractTarGz('example.tar.gz', './output').then(() => console.log('done'));

常见问题

9 个高频疑问

在线解压文件,上传后会被别人看到吗?会不会被删掉?
上传的文件只在服务器内存中处理,解压完成后立即从服务器磁盘删除,不会持久保存。文件内容不会被其他用户访问,因为每个处理请求对应独立的临时目录,请求结束后自动清理。如果还是不放心,建议在本地用 7-Zip/Bandizip 等客户端软件解压敏感文件。
为什么我上传的 .rar 文件解压失败,提示不支持?
当前工具对 .rar 格式只支持读取,不支持写入或修改。如果遇到解压失败,最常见的原因是:1) 文件是 RAR5 格式(新版 WinRAR 默认格式),本工具底层库尚未完全兼容;2) 文件设置了密码保护;3) 文件已损坏。建议先用 WinRAR 或 7-Zip 在本地尝试解压,确认文件本身无问题。
上传的压缩包有中文文件名,解压后变成乱码了怎么办?
这是因为压缩包创建时使用的编码与当前系统/浏览器默认编码不一致。常见于 macOS 或 Linux 下创建的 zip 文件在 Windows 浏览器上解压,或反之。本工具在处理时会尝试自动检测编码(优先 UTF-8),但无法覆盖所有编码场景。如果出现乱码,可以尝试用 Bandizip 或 Keka 等客户端软件手动指定编码重新解压。
最大能上传多大的压缩包?有文件数量限制吗?
受限于后端服务器的内存和超时时间,目前单文件最大支持 500MB。如果压缩包内包含大量小文件(比如超过 10000 个),解压和解包速度会明显变慢,极端情况下可能因超时失败。建议超大或超多文件的压缩包还是用本地客户端软件处理,在线工具适合快速查看少量文件内容。
为什么解压出来的文件比压缩包里显示的原始文件小?
有几种可能:1) 压缩包内包含空文件或目录,解压后实际内容为空;2) 文件是硬链接或符号链接,解压后只是链接本身;3) 压缩包创建时使用了分卷压缩,本工具只解压了第一个分卷的内容。可以检查一下压缩包属性里的「原始大小」和「压缩后大小」是否正常,如果原始大小就是 0,说明文件本身是空的。
在线解压和用 WinRAR 本地解压,结果会不一样吗?
对于标准格式的 zip/tar/gz/7z,结果完全一致。区别在于:1) 在线工具受网络和服务器限制,大文件处理慢;2) 在线工具不支持密码解压(出于安全考虑不实现);3) 在线工具对特殊文件权限(如 Linux 可执行权限)的保留可能不完整,因为浏览器下载时无法保留 Unix 权限位。日常文档类压缩包完全没问题。
上传后等了好久没反应,是卡住了吗?
可能的原因依次排查:1) 文件过大(超过 500MB)导致上传时间过长;2) 网络不稳定导致上传中断;3) 文件损坏导致后端解压进程挂起。建议先检查文件大小,如果小于 100MB 仍无响应,可以尝试刷新页面重新上传一次。如果反复失败,可以按 F12 打开开发者工具 -> Console 标签,看是否有报错信息。
支持同时上传多个压缩包一起解压吗?
不支持批量上传和解压。每次只能处理一个压缩包。如果需要解压多个文件,需要逐个上传处理。这是为了确保每个文件的处理状态清晰可跟踪,避免多文件混合导致文件覆盖或混淆。如果批量处理需求多,建议使用本地脚本或压缩软件自带的批量解压功能。
这个工具和百度网盘的在线解压有什么区别?
核心区别:1) 本工具纯解压,不存储文件,百度网盘会长期保存文件;2) 本工具支持 7z 和 tar.gz 等格式,百度网盘在线解压主要支持 zip/rar;3) 本工具对压缩包内文件类型无限制,百度网盘会限制某些文件格式(如 .exe)的解压;4) 本工具不上传任何账号系统,完全匿名使用。
选择 打开 +新窗口 esc关闭