123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132 |
- <?php
- namespace app\api\controller;
- use app\common\controller\Api;
- use library\File;
- class Upload extends Base
- {
- public function upload()
- {
- if (!($file = $this->getUploadFile()) || empty($file)) {
- $this->error('文件上传异常,文件可能过大或未上传!');
- }
- if (!$file->checkExt(strtolower(sysconf('storage_local_exts')))) {
- $this->error('文件上传类型受限,请在后台配置!');
- }
- if ($file->checkExt('php,sh')) {
- $this->error('可执行文件禁止上传到本地服务器!');
- }
- $this->safe = boolval(input('safe'));
- $this->uptype = $this->getUploadType();
- $this->extend = pathinfo($file->getInfo('name'), PATHINFO_EXTENSION);
- $name = File::name($file->getPathname(), $this->extend, '', 'md5_file');
- $info = File::instance($this->uptype)->save($name, file_get_contents($file->getRealPath()), $this->safe);
- if (is_array($info) && isset($info['url'])) {
- $url = $this->safe ? $name : $info['url'];
- $this->success('成功',$url);
- } else {
- $this->error('文件处理失败,请稍候再试!');
- }
- }
-
- private function getUploadFile()
- {
- try {
- return $this->request->file('file');
- } catch (\Exception $e) {
- $this->error(lang($e->getMessage()));
- }
- }
-
- private function getUploadType()
- {
- $this->uptype = input('uptype');
- if (!in_array($this->uptype, ['local', 'oss', 'qiniu'])) {
- $this->uptype = sysconf('storage_type');
- }
- return $this->uptype;
- }
-
- public function getSignedUrl(){
- $type=$this->request->get('type');
- $data=$this->getPolicy($type.'/');
- $this->success('操作成功',$data);
- }
- protected $id= 'LTAI5tDNASTjwM9mDSGckY3N';
- protected $key= 'nAKY40GjGz4hf5A9RpoffDmaYWNL3y';
- protected $host = 'https://zjth2021.oss-cn-beijing.aliyuncs.com';
- public function getPolicy($path,$maxSize=5000000){
- $now = time();
- $expire = 600;
- $end = $now + $expire;
- $expiration = $this->_gmt_iso8601($end);
- $policy = [
- 'expiration'=>$expiration,
- 'conditions'=>[
- ['content-length-range', 1, $maxSize],
- ['starts-with', '$key', $path],
- ]
- ];
- $policy = json_encode($policy);
- $policy = base64_encode($policy);
- $signature = base64_encode(hash_hmac('sha1', $policy, $this->key, true));
- $response = array();
- $response['OSSAccessKeyId'] = $this->id;
- $response['policy'] = $policy;
- $response['Signature'] = $signature;
- $response['host'] = $this->host;
- $response['expire'] = $end;
- $response['success_action_status'] = 200;
-
- $response['key'] = $path;
- return $response;
- }
- protected function _gmt_iso8601($time) {
- $dtStr = date("c", $time);
- $mydatetime = new \DateTime($dtStr);
- $expiration = $mydatetime->format(\DateTime::ISO8601);
- $pos = strpos($expiration, '+');
- $expiration = substr($expiration, 0, $pos);
- return $expiration."Z";
- }
- }
|