Laravel5.6 文件上传以及文件管理后台

20 Aug 2018 Category: PHP

今天聊聊在Laravel5.6 如何实现文件上传功能,以及上传文件的管理功能。主要有文件列表,上传新文件,创建文件夹,删除文件夹以及删除文件。

首先添加一个控制器,在命令行中输入php php artisan make:controller Admin/FileController,创建一个空的FileController控制器,控制器中有下列四个方法:

我们在app/Services目录下创建一个UploadsManager服务类,用了处理上传文件以及文件目录等相关操作。实现方法

所有文件以及目录的逻辑操作放置在UploadsManager服务类内部,在控制器中对输入参数进行验证后直接调用服务类对应方法。

Laravel文件上传Storage使用的是local disk,上传文件保存在/storage/app下,并以此为根目录。如果要实现上传文件对外访问,则需要在public目录下创建一个软链接至/storage/app。我本地使用的是uploads作为上传文件跟目录url。因此需要在public目录下创建一个名为uploads的软链接。在windows中,可以使用mklink /J source_src_dir dist_src_dir

文件目录列表实现:
*	视图文件
在resources/admin/file下新建index.blade.php,模板中使用table渲染文件目录列表



```html
    <table id="posts-table" class="table table-striped table-bordered">
            <thead>
                <tr>
                    <th>name</th>
                    <th>type</th>
                    <th data-sortable="false">Actions</th>
                </tr>
             </thead>
            <tbody>
            @foreach ($items as $item)
                <tr>
                    @if ($item['type'] == 'dir')
                        <td><a href="{{route('file.index',[ 'folder'=>$item['dist'] ])}}"><span class="dirname">{{ $item['name'] }}</span></a></td>
                    @else
                        <td><span class="filename">{{ $item['name'] }}</span></td>
                    @endif
                    <td>{{ $item['type'] }}</td>
                    <td>
                        <a href="{{route('file.delete',['path'=>$item['dist']])}}" class="btn btn-xs btn-info">
                            <i class="fa fa-edit"></i> Delete
                        </a>
                    </td>
                </tr>
    @endforeach
    </tbody>
    </table>
    Route::get('admin/file/index', 'FileController@index')->name('file.index');
    Route::post('admin/file/upload', 'FileController@upload')->name('file.upload');
    Route::post('admin/file/createFolder', 'FileController@createFolder')->name('file.createFolder');
    Route::get('admin/file/store', 'FileController@store')->name('file.store');
    Route::get('admin/file/delete','FileController@delete')->name('file.delete');

访问http://127.0.0.1:8000/admin/file/index,可以看到文件列表已经显示正常。

image

新建文件夹

image

上传文件

image

文件的删除

文件删除,通过链接中的参数path实现,判断传入路径是目录还是文件,根据不同执行不同的删除方式。

可能遇到的错误

代码下载地址http://blog.static.aiaiaini.com/blog.uploadfile.zip

评论