审查视图

application/api/controller/Common.php 7.3 KB
王智 authored
1 2 3 4 5 6 7 8 9
<?php

namespace app\api\controller;

use app\common\controller\Api;
use app\common\model\Area;
use app\common\model\Version;
use fast\Random;
use think\Config;
王智 authored
10 11 12
use app\common\model\Attachment;
use addons\qiniu\library\Auth;
use think\Db;
王智 authored
13 14 15 16 17 18

/**
 * 公共接口
 */
class Common extends Api
{
王智 authored
19
    protected $noNeedLogin = ['*'];
王智 authored
20 21 22 23 24 25
    protected $noNeedRight = '*';

    /**
     * 加载初始化
     *
     * @param string $version 版本号
王智 authored
26 27
     * @param string $lng 经度
     * @param string $lat 纬度
王智 authored
28 29 30 31 32 33 34
     */
    public function init()
    {
        if ($version = $this->request->request('version')) {
            $lng = $this->request->request('lng');
            $lat = $this->request->request('lat');
            $content = [
王智 authored
35
                'citydata' => Area::getCityFromLngLat($lng, $lat),
王智 authored
36
                'versiondata' => Version::check($version),
王智 authored
37 38
                'uploaddata' => Config::get('upload'),
                'coverdata' => Config::get("cover"),
王智 authored
39 40 41 42 43 44 45 46
            ];
            $this->success('', $content);
        } else {
            $this->error(__('Invalid parameters'));
        }
    }

    /**
王智 authored
47
     * 上传文件-七牛
王智 authored
48 49 50
     * @ApiMethod (POST)
     * @param File $file 文件流
     */
王智 authored
51
    public function uploadQiniu()
王智 authored
52
    {
王智 authored
53 54 55
        Config::set('default_return_type', 'json');
        $config = get_addon_config('qiniu');
王智 authored
56
        $file = $this->request->file('file');
王智 authored
57 58
        if (!$file || !$file->isValid()) {
            $this->error("请上传有效的文件");
王智 authored
59
        }
王智 authored
60
        $fileInfo = $file->getInfo();
王智 authored
61
王智 authored
62
        $filePath = $file->getRealPath() ?: $file->getPathname();
王智 authored
63
王智 authored
64
        preg_match('/(\d+)(\w+)/', $config['maxsize'], $matches);
王智 authored
65 66
        $type = strtolower($matches[2]);
        $typeDict = ['b' => 0, 'k' => 1, 'kb' => 1, 'm' => 2, 'mb' => 2, 'gb' => 3, 'g' => 3];
王智 authored
67 68
        $size = (int)$config['maxsize'] * pow(1024, isset($typeDict[$type]) ? $typeDict[$type] : 0);
王智 authored
69
        $suffix = strtolower(pathinfo($fileInfo['name'], PATHINFO_EXTENSION));
王智 authored
70
        $suffix = $suffix ? $suffix : 'file';
王智 authored
71
王智 authored
72 73 74 75
        $md5 = md5_file($filePath);
        $search = ['$(year)', '$(mon)', '$(day)', '$(etag)', '$(ext)'];
        $replace = [date("Y"), date("m"), date("d"), $md5, '.' . $suffix];
        $object = ltrim(str_replace($search, $replace, $config['savekey']), '/');
王智 authored
76
王智 authored
77 78 79 80 81
        $mimetypeArr = explode(',', strtolower($config['mimetype']));
        $typeArr = explode('/', $fileInfo['type']);
        //检查文件大小
        if (!$file->checkSize($size)) {
            $this->error("起过最大可上传文件限制");
王智 authored
82
        }
王智 authored
83
王智 authored
84
        //验证文件后缀
王智 authored
85
        if ($config['mimetype'] !== '*' &&
王智 authored
86 87
            (
                !in_array($suffix, $mimetypeArr)
王智 authored
88
                || (stripos($typeArr[0] . '/', $config['mimetype']) !== false && (!in_array($fileInfo['type'], $mimetypeArr) && !in_array($typeArr[0] . '/*', $mimetypeArr)))
王智 authored
89 90
            )
        ) {
王智 authored
91
            $this->error(__('上传格式限制'));
王智 authored
92
        }
王智 authored
93 94

        $savekey = '/' . $object;
王智 authored
95 96 97

        $uploadDir = substr($savekey, 0, strripos($savekey, '/') + 1);
        $fileName = substr($savekey, strripos($savekey, '/') + 1);
王智 authored
98 99
        //先上传到本地
        $splInfo = $file->move(ROOT_PATH . '/public' . $uploadDir, $fileName);
王智 authored
100
        if ($splInfo) {
王智 authored
101 102 103 104 105 106 107 108 109 110
            $extparam = $this->request->post();
            $filePath = $splInfo->getRealPath() ?: $splInfo->getPathname();

            $sha1 = sha1_file($filePath);
            $imagewidth = $imageheight = 0;
            if (in_array($suffix, ['gif', 'jpg', 'jpeg', 'bmp', 'png', 'swf'])) {
                $imgInfo = getimagesize($splInfo->getPathname());
                $imagewidth = isset($imgInfo[0]) ? $imgInfo[0] : $imagewidth;
                $imageheight = isset($imgInfo[1]) ? $imgInfo[1] : $imageheight;
            }
王智 authored
111
            $params = array(
王智 authored
112 113 114 115
                'admin_id' => session('admin.id'),
                'user_id' => $this->auth->id,
                'filesize' => $fileInfo['size'],
                'imagewidth' => $imagewidth,
王智 authored
116
                'imageheight' => $imageheight,
王智 authored
117
                'imagetype' => $suffix,
王智 authored
118
                'imageframes' => 0,
王智 authored
119 120 121 122 123 124
                'mimetype' => $fileInfo['type'],
                'url' => $uploadDir . $splInfo->getSaveName(),
                'uploadtime' => time(),
                'storage' => 'local',
                'sha1' => $sha1,
                'extparam' => json_encode($extparam),
王智 authored
125
            );
王智 authored
126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156
            $attachment = Attachment::create(array_filter($params), true);
            $policy = array(
                'saveKey' => ltrim($savekey, '/'),
            );
            $auth = new Auth($config['app_key'], $config['secret_key']);
            $token = $auth->uploadToken($config['bucket'], null, $config['expire'], $policy);
            $multipart = [
                ['name' => 'token', 'contents' => $token],
                [
                    'name' => 'file',
                    'contents' => fopen($filePath, 'r'),
                    'filename' => $fileName,
                ]
            ];
            try {
                $client = new \GuzzleHttp\Client();
                $res = $client->request('POST', $config['uploadurl'], [
                    'multipart' => $multipart
                ]);
                $code = $res->getStatusCode();
                //成功不做任何操作
            } catch (\GuzzleHttp\Exception\ClientException $e) {
                $attachment->delete();
                unlink($filePath);
                $this->error("上传失败");
            }

            $url = '/' . $object;

            //上传成功后将存储变更为qiniu
            $attachment->storage = 'qiniu';
王智 authored
157
            $attachment->save();
王智 authored
158 159

            $this->success("上传成功", cdnurl($url));
王智 authored
160
        } else {
王智 authored
161
            $this->error('上传失败');
王智 authored
162
        }
王智 authored
163 164 165 166
        return;
    }

王智 authored
167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187
    /**
     * 公共接口
     * @ApiTitle    (公共接口-图片预览)
     * @ApiSummary  (图片预览)
     * @ApiMethod   (POST)
     * @ApiRoute    (/api/Common/ImagesLook)
     * @ApiParams   (name="images", type="string", required=true, description="图片")
     * @ApiReturnParams   (name="code", type="integer", required=true, sample="0")
     * @ApiReturnParams   (name="msg", type="string", required=true, sample="返回成功")
     * @ApiReturn   ({
    'code':'1',
    'msg':'返回成功',
    })
     */
    public function ImagesLook()
    {
        $images = input('images');
        $this->success('成功', cdnurl($images));
    }

王智 authored
188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214
    //准备中订单
    public function OkOrder()
    {
        $map['startime'] = ['LT', time()];
        $map1['type'] = ['eq', 2];
        Db::name('renwu')->where($map)->where($map1)->update(['type' => 0]);
    }

    //订单生成
    public function addOrder()
    {
        $map['type'] = ['eq', 1];
        $map1['updatetime'] = ['LT', time() - 86400];
        Db::name('renwu')->where($map)->where($map1)->update(
            [
                'type' => 0,
                'xi_id' => '',
                'xi_type' => 2,
                'xi_images' => '',
                'zhao_id' => '',
                'zhao_type' => 2,
                'zhao_images' => '',
                'car_address' => '',
                'lat' => '',
                'lng' => '',
            ]
        );
王智 authored
215
    }
王智 authored
216 217 218 219 220


    public function open()
    {
        $res=Db::name('open')->order('id desc')->limit(1)->find();
王智 authored
221
        $this->success('成功',cdnurl($res['image']));
王智 authored
222
    }
王智 authored
223
}