You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
111 lines
3.4 KiB
PHP
111 lines
3.4 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Controllers;
|
|
|
|
use App\Models\Upload;
|
|
use Illuminate\Support\Facades\Storage;
|
|
use Illuminate\Support\Str;
|
|
use Illuminate\Http\Request;
|
|
use Lu;
|
|
use Yo;
|
|
use Login;
|
|
|
|
class UploadController extends Controller
|
|
{
|
|
public function search()
|
|
{
|
|
$ext = Upload::select('ext')->groupBy('ext')->get();
|
|
$from = ['AdminImage'];
|
|
return Yo::echo([
|
|
'ext' => $ext,
|
|
'from' => $from,
|
|
]);
|
|
}
|
|
|
|
public function list(Request $request)
|
|
{
|
|
Login::admin(['config-upload']);
|
|
$search = $request->post('search');
|
|
$time = $request->post('time');
|
|
$start_time = !!$time[0] ? Lu::date(strtotime($time[0] . ' 00:00:00')) : '';
|
|
$end_time = !!$time[1] ? Lu::date(strtotime($time[1] . ' 23:59:59')) : '';
|
|
$ext = $request->post('ext');
|
|
$from = $request->post('from');
|
|
$from_map = [
|
|
'AdminImage' => '/api/Admin/Upload/image',
|
|
];
|
|
$from_search = '';
|
|
if (!!$from) $from_search = $from_map[$from];
|
|
$upload_list = Upload::where(function ($query) use ($search) {
|
|
if ($search != '') $query->where('uuid', $search)
|
|
->orWhere('name', $search)
|
|
->orWhere('md5', $search);
|
|
})
|
|
->where(function ($query) use ($start_time) {
|
|
if ($start_time != '') $query->where('created_at', '>=', $start_time);
|
|
})
|
|
->where(function ($query) use ($end_time) {
|
|
if ($end_time != '') $query->where('created_at', '<=', $end_time);
|
|
})
|
|
->where(function ($query) use ($ext) {
|
|
if ($ext != '') $query->where('ext', $ext);
|
|
})
|
|
->where(function ($query) use ($from_search) {
|
|
if ($from_search != '') $query->where('from', $from_search);
|
|
})
|
|
->orderBy('id', 'desc')
|
|
->paginate(20);
|
|
return Yo::echo([
|
|
'list' => $upload_list
|
|
]);
|
|
}
|
|
|
|
public function delete(Request $request)
|
|
{
|
|
Login::admin(['config-upload']);
|
|
$id = $request->post('id');
|
|
$upload = Upload::where('id', $id)->first();
|
|
if (!$upload) Yo::error_echo(100001, ['上传文件']);
|
|
$upload->delete();
|
|
unlink($upload->path);
|
|
return Yo::delete_echo($upload->id);
|
|
}
|
|
|
|
public function image(Request $request)
|
|
{
|
|
$base64 = $request->post('base64');
|
|
if (preg_match('/^(data:\s*image\/(\w+);base64,)/', $base64, $result)) {
|
|
$type = ['png', 'jpeg', 'jpg', 'gif'];
|
|
if (!in_array($result[2], $type)) Yo::error_echo(100015);
|
|
$md5 = md5($base64);
|
|
$upload = Upload::where('md5', $md5)->first();
|
|
if (!$upload) {
|
|
$disk = Storage::disk('public');
|
|
$name = Str::orderedUuid();
|
|
$date = date('Y/m');
|
|
$path = "/assets/upload/image/$date/$name.$result[2]";
|
|
$put = $disk->put($path, base64_decode(str_replace($result[1], '', $base64)));
|
|
if (!$put) Yo::error_echo(100016, ['put']);
|
|
$save = "/storage/assets/upload/image/$date/$name.$result[2]";
|
|
$size = $disk->size($path);
|
|
$p = $disk->path($path);
|
|
$upload = new Upload();
|
|
$upload->uuid = $name;
|
|
$upload->name = 'Base64-' . $md5;
|
|
$upload->path = $p;
|
|
$upload->url = $save;
|
|
$upload->from = explode('?', $_SERVER['REQUEST_URI'])[0];
|
|
$upload->size = $size / 1024 / 1024;
|
|
$upload->ext = $result[2];
|
|
$upload->md5 = $md5;
|
|
$upload->save();
|
|
}
|
|
return Yo::echo([
|
|
'url' => $upload->url
|
|
]);
|
|
} else {
|
|
Yo::error_echo(100016, ['base64']);
|
|
}
|
|
}
|
|
}
|