You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

61 lines
2.0 KiB

<?php
namespace App\Http\Controllers\Mobile;
use App\Helpers\ResponseCode;
use App\Models\Upload;
use Illuminate\Http\Request;
class UploadController extends CommonController
{
/**
* @OA\Post(
* path="/api/mobile/upload-file",
* tags={"小程序-其他"},
* summary="上传文件",
* description="",
* @OA\Parameter(name="file", in="query", @OA\Schema(type="file"), required=true, description="文件"),
* @OA\Parameter(name="token", in="query", @OA\Schema(type="string"), required=true, description="token"),
* @OA\Response(
* response="200",
* description="暂无"
* )
* )
*/
public function uploadFile(Request $request)
{
$file = $request->file('file');
//获取文件大小,单位B
$fileSize = floor($file->getSize());
if ($fileSize >= 50 * 1024 *1024) {
return $this->fail([ResponseCode::ERROR_BUSINESS, '文件必须小于50M']);
}
//过滤文件后缀
$ext = $file->getClientOriginalExtension();
if (in_array($ext, ['zip','rar','ppt','pptx','xls','xlsx','doc','docx','png','gif','jpg','jpeg','pdf','mp4'])) {
// 保存目录
$dir = 'files';
// 文件名
$fileName = time() . uniqid() . '.' . $ext;
$file->storeAs($dir,$fileName,['disk'=>'public']);
// 写入上传文件记录表
$list = [
'original_name'=>$file->getClientOriginalName(),
'folder'=>'storage/'.$dir,
'name'=>$fileName,
'extension'=>$ext,
'size'=>$fileSize,
'creator_id'=>$this->getUserId(),
'created_at'=>date('Y-m-d H:i:s')
];
$id = Upload::insertGetId($list);
$uploadFile = Upload::find($id);
return $this->success($uploadFile);
} else {
return $this->fail([ResponseCode::ERROR_BUSINESS, '文件格式错误']);
}
}
}