Skip to content

Commit b43965d

Browse files
committed
添加支持图片附件上传
1 parent 8a799ee commit b43965d

File tree

7 files changed

+177
-12
lines changed

7 files changed

+177
-12
lines changed

app/Enums/AttachmentStatusEnum.php

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
<?php
2+
/*
3+
|-----------------------------------------------------------------------------------------------------------
4+
| laravel-admin-cms [ 简单高效的开发插件系统 ]
5+
|-----------------------------------------------------------------------------------------------------------
6+
| Licensed ( MIT )
7+
| ----------------------------------------------------------------------------------------------------------
8+
| Copyright (c) 2020-2021 https://gitee.com/liaodeiy/laravel-admin-cms All rights reserved.
9+
| ----------------------------------------------------------------------------------------------------------
10+
| Author: 廖春贵 < liaodeity@gmail.com >
11+
|-----------------------------------------------------------------------------------------------------------
12+
*/
13+
14+
namespace App\Enums;
15+
16+
17+
class AttachmentStatusEnum extends BaseEnum
18+
{
19+
const NORMAL = 1;//正常
20+
const HIDE = 0;//隐藏
21+
const REPEAT = -1;//重复
22+
23+
protected static $ATTRS = [
24+
self::NORMAL => '正常',
25+
self::HIDE => '隐藏',
26+
self::REPEAT => '重复',
27+
];
28+
protected static $COLORS = [
29+
self::NORMAL => ColorEnum::SUCCESS,
30+
self::HIDE => ColorEnum::INFO,
31+
self::REPEAT => ColorEnum::DANGER,
32+
];
33+
}

app/Helpers/function.php

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,17 @@
1919
#系统助手函数库,自定义函数请my_function.php#
2020
#########################################
2121

22+
if (!function_exists ('get_upload_url')) {
23+
function get_upload_url ($url, $source)
24+
{
25+
$source_id = $source->id ?? '';
26+
$source_type = is_object ($source) ? get_class ($source) : '';
27+
$url = $url . '?' . '_token=' . csrf_token () . '&id=' . $source_id . '&type=' . urlencode ($source_type);
28+
29+
return $url;
30+
}
31+
}
32+
2233
if (!function_exists ('get_admin_theme')) {
2334
function get_admin_theme ($clear = false)
2435
{

app/Http/Controllers/Admin/AttachmentController.php

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313

1414
namespace App\Http\Controllers\Admin;
1515

16+
use App\Enums\AttachmentStatusEnum;
1617
use App\Enums\StatusEnum;
1718
use App\Exceptions\BusinessException;
1819
use App\Http\Controllers\Controller;
@@ -83,7 +84,7 @@ public function index (Request $request)
8384
$data[ $key ]['_w_h'] = $wh;
8485
$data[ $key ]['_size'] = $size;
8586
$data[ $key ]['user_id'] = User::showName ($item->user_id);
86-
$data[ $key ]['status'] = StatusEnum::toLabel ($item->status);
87+
$data[ $key ]['status'] = AttachmentStatusEnum::toHtml ($item->status);
8788
}
8889
$result = [
8990
'count' => $count,

app/Http/Controllers/Admin/UploadController.php

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -144,4 +144,65 @@ public function excel (Request $request, $name = 'file')
144144

145145
return ajax_success_result ('上传成功', $result);
146146
}
147+
148+
public function file (Request $request, $name = 'file')
149+
{
150+
set_time_limit (0);
151+
$sourceType = $request->input ('type','');
152+
$sourceId = $request->input ('id', 0);
153+
if ($sourceType) {
154+
$sourceType = urldecode ($sourceType);
155+
}
156+
$files = $request->file ($name);
157+
$filedir = "uploads/file/" . date ('Ymd') . '/';
158+
$imagesName = $files->getClientOriginalName ();
159+
$extension = $files->getClientOriginalExtension ();
160+
$size = $files->getSize ();
161+
$extension = strtolower ($extension);
162+
$allowExt = config ('gui.allow_file_ext');
163+
if (!in_array ($extension, $allowExt)) {
164+
return ['status' => 0, 'info' => '.' . $extension . '的后缀不允许上传'];
165+
}
166+
167+
$newFileName = get_uuid () . "." . $extension;
168+
169+
$path = $filedir . $newFileName;
170+
$content = file_get_contents ($files->getRealPath ());
171+
Storage::disk ('public')->put ($path, $content);
172+
$public_path = 'storage/' . $path;
173+
$insArr = [
174+
'name' => $imagesName,
175+
'path' => $public_path,
176+
'storage_path' => $path,
177+
'file_md5' => md5_file ($public_path),
178+
'file_sha1' => sha1_file ($public_path),
179+
'source_type' => $sourceType,
180+
'source_id' => (int)$sourceId,
181+
'status' => 1
182+
];
183+
$attachment = Attachment::addFile ($insArr);
184+
185+
//$files->move ($filedir, $newImagesName);
186+
//$path = $filedir . $newImagesName;
187+
//$insArr = [
188+
// 'name' => $imagesName,
189+
// 'path' => $path,
190+
// 'file_md5' => md5_file ($path),
191+
// 'file_sha1' => sha1_file ($path),
192+
// 'status' => 1
193+
//];
194+
//$attachment = Attachment::addFile ($insArr);
195+
196+
$result = [
197+
'data' => [
198+
'id' => $attachment->id,
199+
'name' => $attachment->name,
200+
'title' => str_replace ('.' . $extension, '', $attachment->name),
201+
'src' => asset ($attachment->path)
202+
]
203+
];
204+
Log::createLog (Log::INFO_TYPE, '上传附件记录', '', $attachment->id, Attachment::class);
205+
206+
return ajax_success_result ('上传成功', $result);
207+
}
147208
}

config/gui.php

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@
4949
|
5050
| 可以通过`php artisan dev:backup`备份基础表内容
5151
*/
52-
'base_table' => [
52+
'base_table' => [
5353
'users',
5454
'user_admins',
5555
'config_groups',
@@ -61,4 +61,26 @@
6161
'model_has_roles',
6262
'model_has_permissions',
6363
],
64+
/*
65+
|--------------------------------------------------------------------------
66+
| 允许上传的附件后缀
67+
|--------------------------------------------------------------------------
68+
|
69+
*/
70+
'allow_file_ext' => [
71+
'zip',
72+
'rar',
73+
'xls',
74+
'doc',
75+
'ppt',
76+
'xlsx',
77+
'docx',
78+
'pptx',
79+
'png',
80+
'jpg',
81+
'gif',
82+
'mp4',
83+
'mp3',
84+
'ogg'
85+
],
6486
];

resources/views/admin/attachment/index.blade.php

Lines changed: 46 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -39,13 +39,13 @@ class="layui-icon"></i> 搜 索
3939

4040
<script type="text/html" id="toolbarFilter">
4141
<div class="layui-btn-container">
42-
{{-- <button class="layui-btn layui-btn-sm data-add-btn" lay-event="add"> 添加</button>--}}
42+
<button class="layui-btn layui-btn-sm data-add-btn" id="file_upload"> <i class="layui-icon"></i>上传附件</button>
4343
</div>
4444
</script>
4545
<script type="text/html" id="currentTableBar">
4646
@if( check_admin_auth ($MODULE_NAME.' show'))
4747
@{{# if(d._src){ }}
48-
<a target="_blank" href="@{{ d._src }}" class="layui-btn layui-btn-xs layui-btn-primary" >预览</a>
48+
<a target="_blank" href="@{{ d._src }}" class="layui-btn layui-btn-xs layui-btn-primary">预览</a>
4949
@{{# } }}
5050
@endif
5151
</script>
@@ -55,11 +55,12 @@ class="layui-icon"></i> 搜 索
5555

5656
@section('footer')
5757
<script>
58-
layui.use(['form', 'table','laydate'], function () {
58+
layui.use(['form', 'table', 'laydate', 'upload'], function () {
5959
var $ = layui.jquery,
6060
form = layui.form,
6161
table = layui.table,
6262
layuimini = layui.layuimini;
63+
upload = layui.upload;
6364
laydate = layui.laydate;
6465
form.render();
6566
@@ -74,12 +75,15 @@ class="layui-icon"></i> 搜 索
7475
source_type: '{{request ()->input('source_type')}}',
7576
},
7677
cols: [[
77-
{field:'name',title: '附件名称',sort:true},
78-
{field:'_src',title: '附件地址',},
79-
{field:'_w_h',title: '尺寸(长度px*宽度px)',width:180,},
80-
{field:'_size',title: '大小',width:100,},
81-
{field:'user_id',title: '记录人',width:180,sort:true},
82-
{field:'created_at',title: '上传时间',width:180,sort:true},
78+
{field: 'name', title: '附件名称', sort: true},
79+
{field: '_src', title: '附件地址',},
80+
{field: '_w_h', title: '尺寸(长度px*宽度px)', width: 180,},
81+
{field: '_size', title: '大小', width: 100,},
82+
{field: 'file_md5', title: 'MD5', hide: true,},
83+
{field: 'file_sha1', title: 'SHA1', hide: true},
84+
{field: 'user_id', title: '记录人', width: 180, sort: true},
85+
{field: 'status', title: '状态', width: 100, sort: true},
86+
{field: 'created_at', title: '上传时间', width: 180, sort: true},
8387
{title: '操作', width: 100, templet: '#currentTableBar', fixed: "right", align: "center"}
8488
]],
8589
limits: [10, 15, 20, 25, 50, 100],
@@ -90,7 +94,7 @@ class="layui-icon"></i> 搜 索
9094
laydate.render({
9195
elem: '#created_at',
9296
trigger: 'click'
93-
,range:true
97+
, range: true
9498
});
9599
// 监听搜索操作
96100
form.on('submit(data-search-btn)', function (data) {
@@ -115,7 +119,39 @@ class="layui-icon"></i> 搜 索
115119
table.on('checkbox(currentTableFilter)', function (obj) {
116120
console.log(obj)
117121
});
122+
upload.render({
123+
elem: '#file_upload' //绑定元素
124+
, url: '{!! get_upload_url(route('upload.file'), $attachment) !!}' //上传接口
125+
, accept: 'file'
126+
, done: function (res) {
127+
//code=0代表上传成功
128+
if (res.code === 0) {
129+
top.layer.msg(res.message, {
130+
icon: 1,
131+
time: SUCCESS_TIME,
132+
shade: 0.3
133+
});
134+
setTimeout(function () {
135+
$(".layui-form button[type='submit']").click();
136+
}, SUCCESS_TIME)
118137
138+
} else {
139+
top.layer.msg(res.message, {
140+
icon: 2,
141+
time: FAIL_TIME,
142+
shade: 0.3
143+
});
144+
}
145+
}
146+
, error: function () {
147+
//请求异常回调
148+
top.layer.msg('上传接口异常', {
149+
icon: 2,
150+
time: FAIL_TIME,
151+
shade: 0.3
152+
});
153+
}
154+
});
119155
table.on('toolbar(currentTableFilter)', function (obj) {
120156
console.log(obj);
121157
var data = form.val("data-search-filter");

routes/admin.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727

2828
//上传
2929
Route::post ('/upload', [UploadController::class, 'image'])->name ('upload.image');
30+
Route::post ('/upload_file', [UploadController::class, 'file'])->name ('upload.file');
3031
Route::post ('/upload_excel', [UploadController::class, 'excel'])->name ('upload.excel');
3132

3233
Route::get ('config_base_info', [\App\Http\Controllers\Admin\ConfigBaseInfoController::class, 'index']);

0 commit comments

Comments
 (0)