From 4601be715e562b2ebca4645af2f94105feef4fb7 Mon Sep 17 00:00:00 2001 From: liutk <961510893@qq.com> Date: Sun, 19 May 2024 19:57:06 +0800 Subject: [PATCH] =?UTF-8?q?=E8=A1=A5=E5=85=85=E6=9B=B4=E6=96=B0=E7=94=A8?= =?UTF-8?q?=E6=88=B7=E4=BF=A1=E6=81=AF=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Api/ActivityGameController.php | 2 +- app/Http/Controllers/Api/UserController.php | 97 ++++++++++++++++++- app/Http/Requests/UserInfoRequest.php | 49 ++++++++++ app/Traits/UploadTrait.php | 2 +- routes/api.php | 7 +- 5 files changed, 152 insertions(+), 5 deletions(-) create mode 100644 app/Http/Requests/UserInfoRequest.php diff --git a/app/Http/Controllers/Api/ActivityGameController.php b/app/Http/Controllers/Api/ActivityGameController.php index c73e6a9..69f60d1 100644 --- a/app/Http/Controllers/Api/ActivityGameController.php +++ b/app/Http/Controllers/Api/ActivityGameController.php @@ -62,7 +62,7 @@ class ActivityGameController extends ApiController $res = $this->service->join($activityGame, $request->user(), $request->input('score')); if($res['status']){ - return $this->success(null, '参与成功'); + return $this->success(null, '竞猜成功'); }else{ return $this->error($res['message']); } diff --git a/app/Http/Controllers/Api/UserController.php b/app/Http/Controllers/Api/UserController.php index cb84a1c..2c41453 100644 --- a/app/Http/Controllers/Api/UserController.php +++ b/app/Http/Controllers/Api/UserController.php @@ -6,10 +6,13 @@ use Cache; use Carbon\Carbon; use Illuminate\Http\Request; use App\Http\Requests\CodeRequest; +use App\Http\Requests\UserInfoRequest; use App\Services\Api\UserService; use App\Http\Resources\Api\UserResource; use Overtrue\LaravelWeChat\EasyWeChat; use Illuminate\Support\Arr; +use Illuminate\Support\Facades\Storage; +use Slowlyo\OwlAdmin\Admin; class UserController extends ApiController { @@ -48,8 +51,100 @@ class UserController extends ApiController } } - public function updateUserInfo() + public function updateUserInfo(UserInfoRequest $request) { + $user = $request->user(); + $nickName = $request->input('nick_name'); + $avatar = $request->input('avatar'); + //处理头像; + $avatarName = substr( $avatar , strrpos($avatar , '/')+1); + $filePath = 'avatars/'.$avatarName; + $file = file_get_contents($avatar); + Storage::disk(Admin::config('admin.upload.disk'))->put($filePath, $file); + $avatar = Storage::disk(Admin::config('admin.upload.disk'))->url($filePath); + $user->update([ + 'avatar' => $avatar, + 'nick_name' => $nickName + ]); + + return $this->success(null, '修改成功'); + } + + /** + * 执行资源上传 + */ + public function uploadResource(Request $request) + { + $path = $request->input('path', 'uploads') . '/temporary/' . date('Y-m-d'); + $result = []; + + // file 文件 + $files = $request->file(); + if($files){ + foreach ($files as $key => $fileData) { + $item = null; + if (is_array($fileData)) { + foreach ($fileData as $file) { + if($_save_res = $this->saveFile($path, $file)){ + $file_path = Storage::disk(Admin::config('admin.upload.disk'))->url($_save_res); + }else{ + $file_path = ''; + } + $item[] = $file_path; + } + } else { + if($save_res = $this->saveFile($path, $fileData)){ + $file_path = Storage::disk(Admin::config('admin.upload.disk'))->url($save_res); + }else{ + $file_path = ''; + } + $item = $file_path; + } + $result[$key] = $item; + } + }else{ + $data = $request->except(['path']); + foreach ($data as $key => $files) { + $item = null; + if (is_array($files)) { + // $_stop = 0; + foreach ($files as $file) { + $item[] = Storage::disk(Admin::config('admin.upload.disk'))->url($this->saveFile($path, $file)); + } + } else { + $item = Storage::disk(Admin::config('admin.upload.disk'))->url($this->saveFile($path, $files)); + } + $result[$key] = $item; + } + } + + return $this->json($result); + } + + protected function saveFile($path, $file = null) + { + if (gettype($file) == 'object') { + //获取文件大小 + if($size = $file->getSize() > 2*1024*1024){//大于2M + return false; + } + $type = $file->getClientOriginalExtension(); + if (in_array($type, array('jpeg', 'jpg', 'bmp', 'png'))) { + $file = Storage::disk(Admin::config('admin.upload.disk'))->putFile($path, $file); + }else{ + return false; + } + } else if (preg_match('/^(data:\s*image\/(\w+);base64,)/', $file, $result)) { + $type = $result[2]; + if (in_array($type, array('jpeg', 'jpg', 'bmp', 'png'))) { + $savePath = $path . '/' . uniqid() . '.' . $type; + Storage::disk(Admin::config('admin.upload.disk'))->put($savePath, base64_decode(str_replace($result[1], '', $file))); + $file = $savePath; + }else{ + return false; + } + } + return $file; } } \ No newline at end of file diff --git a/app/Http/Requests/UserInfoRequest.php b/app/Http/Requests/UserInfoRequest.php new file mode 100644 index 0000000..c7505e2 --- /dev/null +++ b/app/Http/Requests/UserInfoRequest.php @@ -0,0 +1,49 @@ + 'required|url', + 'nick_name' => 'required|max:10', + ]; + } + + public function messages(){ + $messages = [ + 'avatar.required'=>'请选择头像', + 'avatar.url'=>'头像参数错误', + 'nick_name.required'=>'昵称必填', + 'nick_name.max'=>'昵称长度不能超过10位', + ]; + return $messages; + } + + protected function failedValidation(Validator $validator){ + $error = $validator->errors()->all(); + throw new HttpResponseException(response()->json(['data' => [], 'code' => 400, 'message' => $error[0]])); + } +} diff --git a/app/Traits/UploadTrait.php b/app/Traits/UploadTrait.php index cf5f7f0..c911b3a 100644 --- a/app/Traits/UploadTrait.php +++ b/app/Traits/UploadTrait.php @@ -112,7 +112,7 @@ trait UploadTrait }else{ $fileValue = $file['value']; } - Storage::disk(Admin::config('admin.upload.disk'))->move($file['value'], $filePath); + Storage::disk(Admin::config('admin.upload.disk'))->move($fileValue, $filePath); $fileArr[] = Storage::disk(Admin::config('admin.upload.disk'))->url($filePath); } break; diff --git a/routes/api.php b/routes/api.php index 71817ad..46a0101 100644 --- a/routes/api.php +++ b/routes/api.php @@ -36,13 +36,16 @@ Route::group(['prefix' => 'miniprogram', 'namespace' => 'Api\Miniprogram'], func Route::get('games', [App\Http\Controllers\Api\ActivityGameController::class, 'index']); // 绑定接口 - Route::put('users/bind-phone', [App\Http\Controllers\Api\UserController::class, 'bindPhone']); + Route::post('users/bind-phone', [App\Http\Controllers\Api\UserController::class, 'bindPhone']); // 已授权绑定手机号 Route::middleware([HasBindPhone::class])->group(function(){ //参与竞猜 Route::post('games/{game}/join', [App\Http\Controllers\Api\ActivityGameController::class, 'joinGame']); - //更新资料 + //资源上传; + Route::post('upload-avatar', [App\Http\Controllers\Api\UserController::class, 'uploadResource']); + //更新头像昵称 + Route::post('user/update-info', [App\Http\Controllers\Api\UserController::class, 'updateUserInfo']); //竞猜记录 //中奖记录 //领奖