https://github.com/Chumper/Zipper
github地址
composer require chumper/zipper
看到这个代表安装成功
代表路由
.
.
.
// package chumper/zipper
Route::get('zip', 'ZipController@index')->name('zip.index');
Route::post('zip/download', 'ZipController@download')->name('zip.download');
Route::post('zip/upload', 'ZipController@upload')->name('zip.upload');
创建一个控制器
php artisan make:controller ZipController
这个文件带有过滤功能 并且返回的是一个类.
列表所有日志文件#
app/Http/Controllers/ZipController.php
<?php
namespace App\Http\Controllers;
use File;
use Illuminate\Http\Request;
class ZipController extends Controller
{
public function index()
{
$logs = File::files(storage_path('logs'));
return view('zip', compact('logs'));
}
}
创建视图文件:
touch resources/views/zip.blade.php
填入如下内容:
resources/views/zip.blade.php
@extends('layouts.app')
@section('title', 'chumper/zipper 扩展示例')
@section('content')
<div class="row">
<form class="form-inline pull-right" method="POST" action="{{ route('zip.upload') }}" enctype="multipart/form-data">
{{ csrf_field() }}
<div class="form-group">
<input type="file" name="logs" style="width:170px" required>
</div>
<button type="submit" class="btn btn-default">导入</button>
</form>
<form method="POST" action="{{ route('zip.download') }}">
{{ csrf_field() }}
<button class="btn btn-default" type="submit">批量下载</button>
<table class="table table-striped">
<thead>
<tr>
<th></th>
<th>文件名</th>
<th>创建时间</th>
<th>最后修改时间</th>
</tr>
</thead>
<tbody>
@foreach($logs as $log)
<tr>
<th scope="row"><input type="checkbox" name="logs[]" value="{{ $log->getBasename() }}"></th>
<td>{{ $log->getBasename() }}</td>
<td>{{ Date('Y-m-d H:i:s', $log->getCtime()) }}</td>
<td>{{ Date('Y-m-d H:i:s', $log->getMtime()) }}</td>
</tr>
@endforeach
</tbody>
</table>
</form>
</div>
@endsection
接下来先写一个dowon的方法
.
.
.
use Zipper;
.
.
.
public function download(Request $request)
{
// 打包文件名
$name = 'logs-'.time().'.zip';
// 创建 zip 文件 folder是文件的目录
$zipper = Zipper::make($name)->folder('logs');
//循环用户勾选的文件 logs
foreach($request->logs as $log) {
// 检查提交的文件是否存在
$path = storage_path('logs/'.basename($log));
if (!File::exists($path)) {
continue;
}
// 将文件加入 zip 包
$zipper->add($path);
}
// 关闭zip,一定要调用
$zipper->close();
// 返回下载响应,下载完成后删除文件
return response()->download(public_path($name))->deleteFileAfterSend(true);
}
}
代表下载成功
接下来完成上传解压的功能
.
.
.
public function upload(Request $request)
{
if ($request->logs) {
//加载上传的文件
$zipper = Zipper::make($request->logs);
// 可以使用 listFiles() 查看 zip 文件内容
logger('zip file list:');
logger($zipper->listFiles());
//解压所有以.log结尾的文件
$zipper->folder('logs')->extractMatchingRegex(storage_path('logs'), '/\.log$/');
}
//最终跳转回列表页面
return redirect()->route('zip.index');
}
.
.
.
准备测试文件
这里上传成功