laravel文件上传与下载

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');
    }
.
.
.

准备测试文件
在这里插入图片描述
在这里插入图片描述
这里上传成功

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值