githen / laravel-upload
基于Dropzone为Laravel提供上传支持
v1.3.4
2024-09-20 09:18 UTC
Requires
- illuminate/support: ^6.20|^8.0
- intervention/image: ^2.6
README
基于Dropzone为Laravel提供上传支持
安装
composer require githen/laravel-upload:~v1.3.0 # 迁移配置文件 php artisan vendor:publish --provider="Githen\LaravelUpload\UploadProvider"
配置文件说明
在config/filesystem.php
中添加目录public
配置项
'localFile' => [ 'driver' => 'local', 'root' => public_path(), 'url' => config('app.url'), // 生成url前缀 'permissions' => [ 'file' => [ 'public' => 0770, 'private' => 0600, ], 'dir' => [ 'public' => 0770, 'private' => 0700, ], ], ],
生成upload.php
上传配置文件
return [ /** |-------------------------------------------------------------------------- | 文件上传配置 |-------------------------------------------------------------------------- | '标识' => [ * 'size' => 3, //文件大小上限 类型int 单位MB * 'ext' => ['png', 'jpg'] // 支持的文件类型,类型array * 'resize' => [200, 200] // 若为图片类型,自动处理图片为200X200 * 'path' => 'uploads/'. date('Y/m/d'), // 文件实际存储目录 * ] */ 'global' => [ 'tmp' => 'uploads/tmp', // 临时目录,在表单提交时再将文件移动到path目录 'path' => 'uploads', // 实际存储目录 'name' => 'file', // 文件上传时文件对应的key 'auth' => ['auth'], // 上传controller加载的中间件 'filesystem' => 'localFile', // 使用的文件系统 'thumb' => 'thumb', // 图片类型缩略图名称,a.png => a_thumb.png ], 'img' => [ 'size' => 3, // MB 'ext' => ['.png', '.jpg', '.jpeg', '.zip'], 'resize' => [200,200], // 原图等比压缩,只有图片格式有效,不配置使用原图 'thumb_resize' => [200,200], // 生成缩略图,只有图片格式有效,不配置则不生成 'path' => 'uploads/'. date('Y/m/d'), ] ];
初始化上传实例
自动发现功能将在6.0.0中删除,如果依赖此功能,需要手动关闭。默认生成的JS已处理,可忽略。
Dropzone.autoDiscover = false;
在html
中引入JS文件
<script src=".../dropzone.min.js"></script> <script src="/app-assets/js/scripts/forms/uploadzone.js"></script>
进行实例化
myDropzone = new uploadzone({ dom: '#dpz-single-file', paramName: "{!! config('upload.global.name') !!}", acceptedFiles:"{!! implode(',', config('upload.img.ext')) !!}", // param为上传关联配置的标识 ,必填 // is_tmp 决定使用哪个目录,false时,使用path配置目录,true时使用tmp目录 url:"{!! route('jiaoyu.upload',['param' => 'img', 'is_tmp'=>true]) !!}", csrf:true, // 成功回调,可通过此方法处理返回文件信息 success:function (file){ if (file.status === "success"){ var response = JSON.parse(file.xhr.response); } }, // 失败回调,以下为默认方法,如不修改可省略 error:function (file, data){ if (file.previewElement){ let message = data; if (typeof data.message !== "undefined") message = data.message if (typeof message !== "string" && message.error) { message = message.error; } for (let node of file.previewElement.querySelectorAll( "[data-dz-errormessage]" )) { node.textContent = message; } } }, // 删除文件 removedfile:function(file){ }, // 超过maxFiles限制回调处理 maxfilesexceeded:function(file){ } })
临时目录迁移到正式目录
如果上传的文件是放在临时目录tmp
下,则在实际业务中,需要进行迁移文件到正式目录。可执行以下操作完成迁移操作。
//app('jiaoyu.move') 以单例形貌注入,执行迁移操作 // $from 文件地址 // $to 需要迁移到的目录 // 如果存在缩略图,一并迁移 $result = app('jiaoyu.upload')->move($from, $to); // 返回数据结构 [ "code" => 0, // 0 成功 1失败 "message" => "成功", // 执行说明 "path" => '', // 新文件的目录,缩略图默认在文件名后加入缩略图标识,`upload.global.thumb` ]
删除文件
// $file 要删除的文件 $result = app('jiaoyu.upload')->remove($file); // 返回数据结构 [ "code" => 0, // 0 成功 1失败 "message" => "成功删除", // 执行说明 ]