laravel :上传图片+上传语音+上传视频+获取验证码(阿里大鱼)+验证码登录

<?php


namespace App\Http\Controllers;


use App\Models\Opinion;
use App\Models\Shops;
use App\Models\ShopSchool;
use App\Models\Updated;
use App\Models\User;
use Cache;
use Carbon\Carbon;
use Illuminate\Http\Request;
use PhpSms;
use Storage;


class CommonController extends Controller
{
    public function uploadImage(Request $request)
    {
        if ($request->hasFile('upfile')) {
            $file = $request->file('upfile');
            $allowed_extensions = ['png', 'jpg', 'gif'];
            if ($file->getClientOriginalExtension() && !in_array($file->getClientOriginalExtension(), $allowed_extensions)) {
                return ['error' => 'You may only upload png, jpg or gif.'];
            }
            $baseName =md5(time().str_random(10).uniqid());
            $newName = $baseName.'.'.$file->getClientOriginalExtension();
            $saveDir = 'upload/'.date('Y').'/'.date('m').'/'.date('d').'/';
            $savePath = $saveDir.$newName;
            $bytes = Storage::put($savePath, file_get_contents($file->getRealPath()));
            if (Storage::exists($savePath)) return response()->json(['code'=>200,'msg'=>'上传成功','data'=>['uri'=>$savePath]]);


        }
        return response()->json(['code'=>500,'msg'=>'上传失败']);
    }

//图片修改
    public function postEditorUpload(Request $request)
    {
        if ($request->hasFile('upfile')) {
            $file = $request->file('upfile');
            $allowed_extensions = ['png', 'jpg', 'gif'];
            if ($file->getClientOriginalExtension() && !in_array($file->getClientOriginalExtension(), $allowed_extensions)) {
                return ['error' => 'You may only upload png, jpg or gif.'];
            }
            $baseName =md5(time().str_random(10).uniqid()).'.'.$file->getClientOriginalExtension();
            $newName = $baseName;
            $saveDir = 'uploads/'.date('Y').'/'.date('m').'/'.date('d').'/';
            $savePath = $saveDir.$newName;
//            $bytes = Storage::put($savePath, file_get_contents($file->getRealPath()));
            $bytes = Storage::put($savePath, file_get_contents($file->getRealPath()));
            $size = Storage::size($savePath);
            $url = $savePath;
            if (Storage::exists($savePath))
                return json_encode(array(
                    "originalName" => $file->getClientOriginalName(),
                    "name" => $file->getClientOriginalName(),
                    "url" => $url,
                    "size" => $size,
                    "type" => '.'.$file->getClientOriginalExtension() ,
                    "state" => 'SUCCESS',
                    "full_url" => config('app.img_url').$savePath
                ));
        }
        return response()->json(['code'=>500,'msg'=>'上传失败']);
    }


    public function uploadAudio(Request $request)
    {
        if ($request->hasFile('upfile')) {
            $file = $request->file('upfile');
            $allowed_extensions = ['mp3'];
            if ($file->getClientOriginalExtension() && !in_array($file->getClientOriginalExtension(), $allowed_extensions)) {
                return ['error' => 'You may only upload png, jpg or gif.'];
            }
            $baseName =md5(time().str_random(10).uniqid());
            $newName = $baseName.'.'.$file->getClientOriginalExtension();
            $saveDir = 'upload/'.date('Y').'/'.date('m').'/'.date('d').'/';
            $savePath = $saveDir.$newName;
            $bytes = Storage::put($savePath, file_get_contents($file->getRealPath()));
            if (Storage::exists($savePath)) return response()->json(['code'=>200,'msg'=>'上传成功','data'=>['uri'=>$savePath]]);


        }
        return response()->json(['code'=>500,'msg'=>'上传失败']);

    }



    public function getSmsCode(Request $request)
    {
        $phone = $request->get('phone');
        \Log::info(json_encode($phone));
        if (empty($phone)) return response()->json(['code' => 500, 'msg' => '手机号不能为空!']);
        $user = User::where('email',$phone)->first();
        \Log::info(json_encode($user));
        if(empty($user)) return response()->json(['code' => 404, 'msg' => '手机号不存在,请注册!']);
        if (!Cache::has('reset_phone_' . $phone)) {


            $code_reset = random_int(100000, 999999);


            Cache::put('reset_phone_' . $phone, $phone, 1);
            Cache::put('reset_captcha_' . $phone, $code_reset, 5);
            if (strlen(intval($phone)) != 11) return response()->json(['code' => 500, 'msg' => '手机号格式错误!']);
            $data = ['code' => $code_reset, 'product' => '学生惠'];
            \Log::info(json_encode($data));
            $req = PhpSms::make()->to($phone)->template('Alidayu', 'SMS_55690072')->data($data)->send();
            \Log::info(json_encode($req));
            if($req['success'] == false) {
                return response()->json(['code' => 404, 'msg' => "验证码发送失败\n"."错误消息:".json_decode($req['logs'][0]['result']['info'],true)['sub_msg']]);
            }else{
                return response()->json(['code' => 200, 'msg' => '验证码发送成功']);
            }


        } else {
            return response()->json(['code' => 500, 'msg' => '验证码发送请求太频繁,请稍候重试!']);
        }
    }


    public function SmsCodeLogin(Request $request)
    {
        $phone = $request->get('phone');
        $code  = $request->get('code');
// return $code;
        \Log::info(json_encode($phone));
        \Log::info(json_encode($code));
        if (empty($phone) || empty($code)) return response()->json(['code'=>404,'msg'=>'手机号或验证码不能为空']);
        $user = User::where('email',$phone)->first();
        \Log::info(json_encode($user));
        if (!Cache::has('reset_captcha_'.$phone)) return response()->json(['code'=>404,'msg'=>'未获取验证码或验证码已失效']);
        if(empty($user)){
            return response()->json(['code'=>500,'msg'=>'手机号不存在!']);
        }elseif (Cache::get('reset_captcha_'.$phone) != $code){
            return response()->json(['code'=>500,'msg'=>'验证码错误!']);
        }else{
            Cache::pull('reset_phone_'.$phone);
            Cache::pull('reset_captcha_'.$phone);
            $user = User::where('email', $phone)->first();
            $token = $user->createToken('scopes', [$user->scope])->accessToken;
            \Log::info(json_encode($token));
            return response()->json(['code'=>200,'data'=>['token'=>$token]]);
        }
    }


    public function resetPassword(Request $request)
    {
        $phone = $request->get('phone');
        $code  = $request->get('code');
        $password = $request->get('password');
// return response()->json(['code'=>404,'msg'=>'55','data'=>['phone'=>$phone,'code'=>$code,'pa'=>$password]]);
        if (empty($phone) || empty($code)) return response()->json(['code'=>404,'msg'=>'手机号或验证码不能为空']);
        if (!Cache::has('reset_captcha_'.$phone)) return response()->json(['code'=>404,'msg'=>'未获取验证码或验证码已失效']);
        if (Cache::get('reset_captcha_'.$phone) != $code){
            return response()->json(['code'=>500,'msg'=>'验证码错误!']);
        }else{
            Cache::pull('reset_phone_'.$phone);
            Cache::pull('reset_captcha_'.$phone);
            $user = User::where('email', $phone)->first();
            $user->password = bcrypt($password);
            $user->save();
            return response()->json(['code'=>200,'msg'=>'ok']);
        }
    }

}

//前端

<div class="form-group " id="aetherupload-wrapper" >

<!--组件最外部需要有一个名为aetherupload-wrapper的id,用以包装组件-->

                                    <label for="inputEmail3" class="col-sm-2 control-label">选择视频:</label>
                                    <div class="col-sm-10" >
                                        <input type="text" id="res" class="inp form-control" style="padding: 4px 12px;float:left" name="video" placeholder="视频">
                              <input type="file" id="file"  onchange="aetherupload(this,'file').success(someCallback).upload()"/>
                                        <div class="progress " style="height: 6px;margin-bottom: 2px;margin-top: 10px;width: 200px;">
                                            <div id="progressbar" style="background:blue;height:6px;width:0;"></div>
                                        </div>
                                        <span style="font-size:12px;color:#aaa;" id="output"></span><!--需要有一个名为output的id,用以标识提示信息-->
                                    </div>
                                    <div id="result"></div>

                                </div>


                                <div class="form-group">
                                    <label for="inputPassword3" class="col-sm-2 control-label">图片</label>
                                    <div class="col-sm-10">
                                        <input type="text" id="input-upload" class="inp form-control" style="padding: 4px 12px;float:left;width: 93%" name="url_one" placeholder="图片">
                                        <input type="button" class="btn btn-primary blue" onclick="getElementById('img-upload').click()" value="上传" style="float:left;">
                                        <input type= "file" id="img-upload" name="upfile" onchange="uploadImage()" style="display: none"/>
                                    </div>

                                </div>

<script src="{{ URL::asset('js/spark-md5.min.js') }}"></script><!--需要引入spark-md5.min.js-->
    <script src="{{ URL::asset('cdn.bootcss.com/jquery/2.2.3/jquery.min.js') }}"></script><!--需要引入jquery.min.js-->
    <script src="{{ URL::asset('js/aetherupload.js') }}"></script><!--需要引入aetherupload.js-->
    <script>
        // success(callback)中声名的回调方法需在此定义,参数callback可为任意名称,此方法将会在上传完成后被调用
        // 可使用this对象获得fileName,fileSize,uploadBaseName,uploadExt,subDir,group,savedPath等属性的值
        someCallback = function(){
            // Example
            $("#res").val(this.savedPath.substr(this.savedPath.lastIndexOf('/') + 1))
        }


    </script>


    <script type="text/javascript">
        function uploadImage() {
            //创建FormData对象
            var data = new FormData();
            //为FormData对象添加数据
            $.each($('#img-upload')[0].files, function(i, file) {
                data.append('upload_img', file);
                data.append('_token', '{{csrf_token()}}');
            });
            $.ajax({
                url:'{{url('Admin/upload/Image')}}',
                type: 'POST',
                data: data,
                cache: false,
                contentType: false,    //不可缺
                processData: false,    //不可缺
                dataType:'json',
                success:function(data){
                    $('#input-upload').val(data.url);
                }
            });
        }
        
    </script>

猜你喜欢

转载自blog.csdn.net/qq_39191303/article/details/80564409