文件上传RAR支持说明
# 文件上传RAR支持说明
## 功能概述
系统已支持ZIP和RAR两种压缩格式的批量文件导入功能。
## 已实现功能
### 1. 前端支持
- ✅ 文件选择后显示文件名和大小
- ✅ 支持拖拽上传
- ✅ 支持ZIP和RAR格式选择
- ✅ 文件列表实时预览
- ✅ 可删除已选文件
### 2. 后端支持
- ✅ ZIP格式解压(使用ZipArchive类)
- ✅ RAR格式解压(使用RarArchive类)
- ✅ 自动识别压缩格式
- ✅ 批量导入文档
- ✅ 导入结果统计
## RAR扩展安装
### Windows系统
1. 下载PHP RAR扩展DLL文件
- 访问:https://pecl.php.net/package/rar
- 下载对应PHP版本的DLL文件
2. 安装步骤
```
1. 将 php_rar.dll 复制到 PHP 的 ext 目录
2. 编辑 php.ini,添加:extension=rar
3. 重启Web服务器(Apache/Nginx)
4. 运行 php -m 检查是否加载成功
```
### Linux系统
1. 使用PECL安装
```bash
# 安装依赖
sudo apt-get install libunrar-dev # Debian/Ubuntu
sudo yum install unrar-devel # CentOS/RHEL
# 安装RAR扩展
sudo pecl install rar
# 启用扩展
echo "extension=rar.so" | sudo tee /etc/php/8.1/mods-available/rar.ini
sudo phpenmod rar
# 重启服务
sudo systemctl restart php8.1-fpm
sudo systemctl restart nginx
```
2. 验证安装
```bash
php -m | grep rar
```
## 使用说明
### 1. 上传ZIP文件
- 选择"ZIP批量上传"选项卡
- 点击或拖拽ZIP文件到上传区域
- 系统会自动解压并导入所有支持的文档
### 2. 上传RAR文件
- 选择"ZIP批量上传"选项卡(同时支持RAR)
- 点击或拖拽RAR文件到上传区域
- 如果服务器已安装RAR扩展,会自动解压导入
- 如果未安装扩展,会提示安装说明
### 3. 支持的文档格式
- TXT(纯文本)
- MD(Markdown)
- PDF(需要pdftotext工具)
- DOCX(Word文档)
- DOC(旧版Word)
- XLSX(Excel)
- XLS(旧版Excel)
- CSV(逗号分隔值)
- HTML/HTM(网页)
- JSON(数据文件)
## 错误处理
### 如果RAR解压失败
系统会返回友好提示:
```
服务器不支持RAR解压,请安装rar扩展或使用ZIP格式
```
**解决方案:**
1. 按照上述说明安装RAR扩展
2. 或者将RAR文件转换为ZIP格式后上传
### Linux系统识别为bin类型
**问题原因:**
Linux系统可能无法正确识别文件MIME类型
**已修复:**
- 后端已添加多种MIME类型支持
- 使用文件扩展名作为备用判断
- 支持:application/zip, application/x-zip-compressed, application/x-rar-compressed, application/vnd.rar
## 测试建议
1. **测试ZIP上传**
- 创建包含多个文档的ZIP文件
- 上传并验证所有文件是否正确导入
2. **测试RAR上传**
- 创建包含多个文档的RAR文件
- 上传并检查是否正确解压
- 如果失败,按照说明安装RAR扩展
3. **测试文件显示**
- 选择文件后应立即显示文件名和大小
- 可以点击删除按钮取消选择
- 重新选择文件应更新显示
## 技术细节
### 文件大小格式化
```javascript
function formatFileSize(bytes) {
if (bytes === 0) return '0 B';
var k = 1024;
var sizes = ['B', 'KB', 'MB', 'GB'];
var i = Math.floor(Math.log(bytes) / Math.log(k));
return (bytes / Math.pow(k, i)).toFixed(2) + ' ' + sizes[i];
}
```
### RAR解压逻辑
```php
if (!class_exists('RarArchive')) {
return $this->error('服务器不支持RAR解压,请安装rar扩展或使用ZIP格式');
}
$rar = \RarArchive::open($archivePath);
$entries = $rar->getEntries();
foreach ($entries as $entry) {
if (!$entry->isDirectory()) {
$entry->extract($extractDir);
}
}
$rar->close();
```
## 注意事项
1. **文件大小限制**
- 受PHP配置限制(upload_max_filesize, post_max_size)
- 建议设置为至少50MB
2. **超时设置**
- AJAX请求超时设置为300秒(5分钟)
- 适合处理大型压缩包
3. **临时文件清理**
- 系统会自动清理解压后的临时文件
- 无需手动维护
4. **安全性**
- 只支持预定义的文件类型
- 自动过滤不支持的文件
- 防止路径遍历攻击
版本 1 · 约 2,864 字
暂无评论