ComposerUpdate & 配置阿里云OSS下载原文件名

This commit is contained in:
Anyon 2020-01-13 14:49:12 +08:00
parent d155c204f5
commit 584eba4b62
17 changed files with 95 additions and 81 deletions

View File

@ -41,6 +41,7 @@ define(['md5'], function (SparkMD5, allowExtsMimes) {
uploader.config.data.signature = ret.data.signature; uploader.config.data.signature = ret.data.signature;
uploader.config.data.OSSAccessKeyId = ret.data.OSSAccessKeyId; uploader.config.data.OSSAccessKeyId = ret.data.OSSAccessKeyId;
uploader.config.data.success_action_status = 200; uploader.config.data.success_action_status = 200;
uploader.config.data['Content-Disposition'] = 'attachment;filename=' + encodeURIComponent(file.name);
} }
object.upload(index, file); object.upload(index, file);
} else if (parseInt(ret.code) === 200) { } else if (parseInt(ret.code) === 200) {

28
composer.lock generated
View File

@ -558,16 +558,16 @@
}, },
{ {
"name": "topthink/framework", "name": "topthink/framework",
"version": "v6.0.1", "version": "v6.0.2",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/top-think/framework.git", "url": "https://github.com/top-think/framework.git",
"reference": "501f3dd17dc6266e17b7d8df3e9fd090bd2cc85f" "reference": "1444cce94b40a836958380b160a5fb7bfc165daf"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/top-think/framework/zipball/501f3dd17dc6266e17b7d8df3e9fd090bd2cc85f", "url": "https://api.github.com/repos/top-think/framework/zipball/1444cce94b40a836958380b160a5fb7bfc165daf",
"reference": "501f3dd17dc6266e17b7d8df3e9fd090bd2cc85f", "reference": "1444cce94b40a836958380b160a5fb7bfc165daf",
"shasum": "", "shasum": "",
"mirrors": [ "mirrors": [
{ {
@ -622,7 +622,7 @@
"orm", "orm",
"thinkphp" "thinkphp"
], ],
"time": "2019-12-24T07:57:03+00:00" "time": "2020-01-13T05:48:05+00:00"
}, },
{ {
"name": "topthink/think-helper", "name": "topthink/think-helper",
@ -721,16 +721,16 @@
}, },
{ {
"name": "topthink/think-orm", "name": "topthink/think-orm",
"version": "v2.0.30", "version": "v2.0.31",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/top-think/think-orm.git", "url": "https://github.com/top-think/think-orm.git",
"reference": "b6f61fc243974a25cb6914b84a529b373a717626" "reference": "d6965dfae21f150e29cc899ab6f9b1bd2c0f2ee4"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/top-think/think-orm/zipball/b6f61fc243974a25cb6914b84a529b373a717626", "url": "https://api.github.com/repos/top-think/think-orm/zipball/d6965dfae21f150e29cc899ab6f9b1bd2c0f2ee4",
"reference": "b6f61fc243974a25cb6914b84a529b373a717626", "reference": "d6965dfae21f150e29cc899ab6f9b1bd2c0f2ee4",
"shasum": "", "shasum": "",
"mirrors": [ "mirrors": [
{ {
@ -768,7 +768,7 @@
"database", "database",
"orm" "orm"
], ],
"time": "2020-01-02T09:09:50+00:00" "time": "2020-01-07T10:05:10+00:00"
}, },
{ {
"name": "topthink/think-template", "name": "topthink/think-template",
@ -909,12 +909,12 @@
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/zoujingli/ThinkLibrary.git", "url": "https://github.com/zoujingli/ThinkLibrary.git",
"reference": "88d74e6f666cc23103da97e8e2307ecc5db1b031" "reference": "73ce73f61a90994e23b7616c73655440f50790a0"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/zoujingli/ThinkLibrary/zipball/88d74e6f666cc23103da97e8e2307ecc5db1b031", "url": "https://api.github.com/repos/zoujingli/ThinkLibrary/zipball/73ce73f61a90994e23b7616c73655440f50790a0",
"reference": "88d74e6f666cc23103da97e8e2307ecc5db1b031", "reference": "73ce73f61a90994e23b7616c73655440f50790a0",
"shasum": "", "shasum": "",
"mirrors": [ "mirrors": [
{ {
@ -958,7 +958,7 @@
], ],
"description": "ThinkPHP v6.0 Development Library", "description": "ThinkPHP v6.0 Development Library",
"homepage": "http://framework.thinkadmin.top", "homepage": "http://framework.thinkadmin.top",
"time": "2020-01-11T07:50:11+00:00" "time": "2020-01-13T06:39:14+00:00"
}, },
{ {
"name": "zoujingli/wechat-developer", "name": "zoujingli/wechat-developer",

View File

@ -569,17 +569,17 @@
}, },
{ {
"name": "topthink/framework", "name": "topthink/framework",
"version": "v6.0.1", "version": "v6.0.2",
"version_normalized": "6.0.1.0", "version_normalized": "6.0.2.0",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/top-think/framework.git", "url": "https://github.com/top-think/framework.git",
"reference": "501f3dd17dc6266e17b7d8df3e9fd090bd2cc85f" "reference": "1444cce94b40a836958380b160a5fb7bfc165daf"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/top-think/framework/zipball/501f3dd17dc6266e17b7d8df3e9fd090bd2cc85f", "url": "https://api.github.com/repos/top-think/framework/zipball/1444cce94b40a836958380b160a5fb7bfc165daf",
"reference": "501f3dd17dc6266e17b7d8df3e9fd090bd2cc85f", "reference": "1444cce94b40a836958380b160a5fb7bfc165daf",
"shasum": "", "shasum": "",
"mirrors": [ "mirrors": [
{ {
@ -606,7 +606,7 @@
"mockery/mockery": "^1.2", "mockery/mockery": "^1.2",
"phpunit/phpunit": "^7.0" "phpunit/phpunit": "^7.0"
}, },
"time": "2019-12-24T07:57:03+00:00", "time": "2020-01-13T05:48:05+00:00",
"type": "library", "type": "library",
"installation-source": "dist", "installation-source": "dist",
"autoload": { "autoload": {
@ -738,17 +738,17 @@
}, },
{ {
"name": "topthink/think-orm", "name": "topthink/think-orm",
"version": "v2.0.30", "version": "v2.0.31",
"version_normalized": "2.0.30.0", "version_normalized": "2.0.31.0",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/top-think/think-orm.git", "url": "https://github.com/top-think/think-orm.git",
"reference": "b6f61fc243974a25cb6914b84a529b373a717626" "reference": "d6965dfae21f150e29cc899ab6f9b1bd2c0f2ee4"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/top-think/think-orm/zipball/b6f61fc243974a25cb6914b84a529b373a717626", "url": "https://api.github.com/repos/top-think/think-orm/zipball/d6965dfae21f150e29cc899ab6f9b1bd2c0f2ee4",
"reference": "b6f61fc243974a25cb6914b84a529b373a717626", "reference": "d6965dfae21f150e29cc899ab6f9b1bd2c0f2ee4",
"shasum": "", "shasum": "",
"mirrors": [ "mirrors": [
{ {
@ -764,7 +764,7 @@
"psr/simple-cache": "^1.0", "psr/simple-cache": "^1.0",
"topthink/think-helper": "^3.1" "topthink/think-helper": "^3.1"
}, },
"time": "2020-01-02T09:09:50+00:00", "time": "2020-01-07T10:05:10+00:00",
"type": "library", "type": "library",
"installation-source": "dist", "installation-source": "dist",
"autoload": { "autoload": {
@ -935,12 +935,12 @@
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/zoujingli/ThinkLibrary.git", "url": "https://github.com/zoujingli/ThinkLibrary.git",
"reference": "88d74e6f666cc23103da97e8e2307ecc5db1b031" "reference": "73ce73f61a90994e23b7616c73655440f50790a0"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/zoujingli/ThinkLibrary/zipball/88d74e6f666cc23103da97e8e2307ecc5db1b031", "url": "https://api.github.com/repos/zoujingli/ThinkLibrary/zipball/73ce73f61a90994e23b7616c73655440f50790a0",
"reference": "88d74e6f666cc23103da97e8e2307ecc5db1b031", "reference": "73ce73f61a90994e23b7616c73655440f50790a0",
"shasum": "", "shasum": "",
"mirrors": [ "mirrors": [
{ {
@ -956,7 +956,7 @@
"ext-json": "*", "ext-json": "*",
"topthink/framework": "^6.0" "topthink/framework": "^6.0"
}, },
"time": "2020-01-11T07:50:11+00:00", "time": "2020-01-13T06:39:14+00:00",
"type": "library", "type": "library",
"extra": { "extra": {
"think": { "think": {

2
vendor/services.php vendored
View File

@ -1,5 +1,5 @@
<?php <?php
// This file is automatically generated at:2020-01-11 16:01:42 // This file is automatically generated at:2020-01-13 14:48:33
declare (strict_types = 1); declare (strict_types = 1);
return array ( return array (
0 => 'think\\app\\Service', 0 => 'think\\app\\Service',

View File

@ -39,7 +39,7 @@ use think\initializer\RegisterService;
*/ */
class App extends Container class App extends Container
{ {
const VERSION = '6.0.1'; const VERSION = '6.0.2';
/** /**
* 应用调试模式 * 应用调试模式

View File

@ -66,7 +66,7 @@ class Middleware
{ {
$middleware = $this->buildMiddleware($middleware, $type); $middleware = $this->buildMiddleware($middleware, $type);
if ($middleware) { if (!empty($middleware)) {
$this->queue[$type][] = $middleware; $this->queue[$type][] = $middleware;
$this->queue[$type] = array_unique($this->queue[$type], SORT_REGULAR); $this->queue[$type] = array_unique($this->queue[$type], SORT_REGULAR);
} }
@ -135,11 +135,11 @@ class Middleware
return (new Pipeline()) return (new Pipeline())
->through(array_map(function ($middleware) { ->through(array_map(function ($middleware) {
return function ($request, $next) use ($middleware) { return function ($request, $next) use ($middleware) {
[$call, $param] = $middleware; [$call, $params] = $middleware;
if (is_array($call) && is_string($call[0])) { if (is_array($call) && is_string($call[0])) {
$call = [$this->app->make($call[0]), $call[1]]; $call = [$this->app->make($call[0]), $call[1]];
} }
$response = call_user_func($call, $request, $next, $param); $response = call_user_func($call, $request, $next, ...$params);
if (!$response instanceof Response) { if (!$response instanceof Response) {
throw new LogicException('The middleware must return Response instance'); throw new LogicException('The middleware must return Response instance');
@ -182,9 +182,7 @@ class Middleware
$handler->report($e); $handler->report($e);
$response = $handler->render($passable, $e); return $handler->render($passable, $e);
return $response;
} }
/** /**
@ -197,11 +195,11 @@ class Middleware
protected function buildMiddleware($middleware, string $type): array protected function buildMiddleware($middleware, string $type): array
{ {
if (is_array($middleware)) { if (is_array($middleware)) {
[$middleware, $param] = $middleware; [$middleware, $params] = $middleware;
} }
if ($middleware instanceof Closure) { if ($middleware instanceof Closure) {
return [$middleware, $param ?? null]; return [$middleware, $params ?? []];
} }
if (!is_string($middleware)) { if (!is_string($middleware)) {
@ -220,7 +218,7 @@ class Middleware
return []; return [];
} }
return [[$middleware, 'handle'], $param ?? null]; return [[$middleware, 'handle'], $params ?? []];
} }
/** /**

View File

@ -327,12 +327,14 @@ class Request
} }
$request->header = array_change_key_case($header); $request->header = array_change_key_case($header);
$request->server = $_SERVER;
$request->env = $app->env;
$inputData = $request->getInputData($request->input);
$request->server = $_SERVER;
$request->env = $app->env;
$request->get = $_GET; $request->get = $_GET;
$request->post = $_POST ?: $request->getInputData($request->input); $request->post = $_POST ?: $inputData;
$request->put = $request->getInputData($request->input); $request->put = $inputData;
$request->request = $_REQUEST; $request->request = $_REQUEST;
$request->cookie = $_COOKIE; $request->cookie = $_COOKIE;
$request->file = $_FILES ?? []; $request->file = $_FILES ?? [];
@ -982,11 +984,12 @@ class Request
protected function getInputData($content): array protected function getInputData($content): array
{ {
if (false !== strpos($this->contentType(), 'json')) { $contentType = $this->contentType();
return (array) json_decode($content, true); if ($contentType == 'application/x-www-form-urlencoded') {
} elseif (strpos($content, '=')) {
parse_str($content, $data); parse_str($content, $data);
return $data; return $data;
} elseif (false !== strpos($contentType, 'json')) {
return (array) json_decode($content, true);
} }
return []; return [];
@ -2051,15 +2054,18 @@ class Request
/** /**
* 设置php://input数据 * 设置php://input数据
* @access public * @access public
* @param string $input RAW数据 * @param string $input RAW数据
* @return $this * @return $this
*/ */
public function withInput(string $input) public function withInput(string $input)
{ {
$this->input = $input; $this->input = $input;
if (!empty($input)) { if (!empty($input)) {
$this->post = $this->getInputData($input); $inputData = $this->getInputData($input);
$this->put = $this->getInputData($input); if (!empty($inputData)) {
$this->post = $inputData;
$this->put = $inputData;
}
} }
return $this; return $this;
} }

View File

@ -131,7 +131,7 @@ class Validate
'chsAlphaNum' => '/^[\x{4e00}-\x{9fa5}a-zA-Z0-9]+$/u', 'chsAlphaNum' => '/^[\x{4e00}-\x{9fa5}a-zA-Z0-9]+$/u',
'chsDash' => '/^[\x{4e00}-\x{9fa5}a-zA-Z0-9\_\-]+$/u', 'chsDash' => '/^[\x{4e00}-\x{9fa5}a-zA-Z0-9\_\-]+$/u',
'mobile' => '/^1[3-9]\d{9}$/', 'mobile' => '/^1[3-9]\d{9}$/',
'idCard' => '/(^[1-9]\d{5}(18|19|([23]\d))\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]$)|(^[1-9]\d{5}\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\d{2}$)/', 'idCard' => '/(^[1-9]\d{5}(18|19|([23]\d))\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]$)|(^[1-9]\d{5}\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\d{3}$)/',
'zip' => '/\d{6}/', 'zip' => '/\d{6}/',
]; ];

View File

@ -85,8 +85,8 @@ class Schema extends Command
$model = new $class; $model = new $class;
$table = $model->getTable(); $table = $model->getTable();
$dbName = $model->getConnection()->getConfig('database'); $dbName = $model->db()->getConnection()->getConfig('database');
$path = $model->getConnection()->getConfig('schema_cache_path'); $path = $model->db()->getConnection()->getConfig('schema_cache_path');
if (!is_dir($path)) { if (!is_dir($path)) {
mkdir($path, 0755, true); mkdir($path, 0755, true);
} }

View File

@ -387,17 +387,17 @@ abstract class Rule
/** /**
* 指定路由中间件 * 指定路由中间件
* @access public * @access public
* @param string|array|Closure $middleware 中间件 * @param string|array|Closure $middleware 中间件
* @param mixed $param 参数 * @param mixed $params 参数
* @return $this * @return $this
*/ */
public function middleware($middleware, $param = null) public function middleware($middleware, ...$params)
{ {
if (is_null($param) && is_array($middleware)) { if (empty($params) && is_array($middleware)) {
$this->option['middleware'] = $middleware; $this->option['middleware'] = $middleware;
} else { } else {
foreach ((array) $middleware as $item) { foreach ((array) $middleware as $item) {
$this->option['middleware'][] = [$item, $param]; $this->option['middleware'][] = [$item, $params];
} }
} }

View File

@ -83,7 +83,8 @@ class Controller extends Dispatch
->send($this->request) ->send($this->request)
->then(function () use ($instance) { ->then(function () use ($instance) {
// 获取当前操作名 // 获取当前操作名
$action = $this->actionName . $this->rule->config('action_suffix'); $suffix = $this->rule->config('action_suffix');
$action = $this->actionName . $suffix;
if (is_callable([$instance, $action])) { if (is_callable([$instance, $action])) {
$vars = $this->request->param(); $vars = $this->request->param();
@ -91,6 +92,10 @@ class Controller extends Dispatch
$reflect = new ReflectionMethod($instance, $action); $reflect = new ReflectionMethod($instance, $action);
// 严格获取当前操作方法名 // 严格获取当前操作方法名
$actionName = $reflect->getName(); $actionName = $reflect->getName();
if ($suffix) {
$actionName = substr($actionName, 0, -strlen($suffix));
}
$this->request->setAction($actionName); $this->request->setAction($actionName);
} catch (ReflectionException $e) { } catch (ReflectionException $e) {
$reflect = new ReflectionMethod($instance, '__call'); $reflect = new ReflectionMethod($instance, '__call');
@ -127,12 +132,12 @@ class Controller extends Dispatch
foreach ($middlewares as $key => $val) { foreach ($middlewares as $key => $val) {
if (!is_int($key)) { if (!is_int($key)) {
if (isset($val['only']) && !in_array($this->request->action(true), array_map(function ($item) { if (isset($val['only']) && !in_array($this->request->action(true), array_map(function ($item) {
return strtolower($item); return strtolower($item);
}, is_string($val['only']) ? explode(",", $val['only']) : $val['only']))) { }, is_string($val['only']) ? explode(",", $val['only']) : $val['only']))) {
continue; continue;
} elseif (isset($val['except']) && in_array($this->request->action(true), array_map(function ($item) { } elseif (isset($val['except']) && in_array($this->request->action(true), array_map(function ($item) {
return strtolower($item); return strtolower($item);
}, is_string($val['except']) ? explode(',', $val['except']) : $val['except']))) { }, is_string($val['except']) ? explode(',', $val['except']) : $val['except']))) {
continue; continue;
} else { } else {
$val = $key; $val = $key;

View File

@ -118,7 +118,7 @@ class Store
*/ */
public function setId($id = null): void public function setId($id = null): void
{ {
$this->id = is_string($id) && strlen($id) === 32 ? $id : md5(microtime(true) . session_create_id()); $this->id = is_string($id) && strlen($id) === 32 && ctype_alnum($id) ? $id : md5(microtime(true) . session_create_id());
} }
/** /**

View File

@ -119,8 +119,8 @@ class CacheTest extends TestCase
$redis->shouldReceive("set")->once()->with('foo', 5)->andReturnTrue(); $redis->shouldReceive("set")->once()->with('foo', 5)->andReturnTrue();
$redis->shouldReceive("incrby")->once()->with('foo', 1)->andReturnTrue(); $redis->shouldReceive("incrby")->once()->with('foo', 1)->andReturnTrue();
$redis->shouldReceive("decrby")->once()->with('foo', 2)->andReturnTrue(); $redis->shouldReceive("decrby")->once()->with('foo', 2)->andReturnTrue();
$redis->shouldReceive("get")->once()->with('foo')->andReturn(6); $redis->shouldReceive("get")->once()->with('foo')->andReturn('6');
$redis->shouldReceive("get")->once()->with('foo')->andReturn(4); $redis->shouldReceive("get")->once()->with('foo')->andReturn('4');
$redis->shouldReceive("set")->once()->with('bar', serialize(true))->andReturnTrue(); $redis->shouldReceive("set")->once()->with('bar', serialize(true))->andReturnTrue();
$redis->shouldReceive("set")->once()->with('baz', serialize(null))->andReturnTrue(); $redis->shouldReceive("set")->once()->with('baz', serialize(null))->andReturnTrue();
$redis->shouldReceive("del")->once()->with('baz')->andReturnTrue(); $redis->shouldReceive("del")->once()->with('baz')->andReturnTrue();

View File

@ -829,6 +829,18 @@ abstract class BaseQuery
return $this; return $this;
} }
/**
* 设置自增序列名
* @access public
* @param string $sequence 自增序列名
* @return $this
*/
public function sequence(string $sequence = null)
{
$this->options['sequence'] = $sequence;
return $this;
}
/** /**
* 设置JSON字段信息 * 设置JSON字段信息
* @access public * @access public

View File

@ -228,18 +228,6 @@ class Query extends BaseQuery
return $this; return $this;
} }
/**
* 设置自增序列名
* @access public
* @param string $sequence 自增序列名
* @return $this
*/
public function sequence(string $sequence = null)
{
$this->options['sequence'] = $sequence;
return $this;
}
/** /**
* 指定强制索引 * 指定强制索引
* @access public * @access public

View File

@ -424,7 +424,7 @@ trait Attribute
break; break;
case 'datetime': case 'datetime':
$value = is_numeric($value) ? $value : strtotime($value); $value = is_numeric($value) ? $value : strtotime($value);
$value = $this->formatDateTime('Y-m-d H:i:s.u', $value); $value = $this->formatDateTime('Y-m-d H:i:s.u', $value, true);
break; break;
case 'object': case 'object':
if (is_object($value)) { if (is_object($value)) {

View File

@ -99,9 +99,10 @@ class AliossStorage extends Storage
* @param string $name 文件名称 * @param string $name 文件名称
* @param string $file 文件内容 * @param string $file 文件内容
* @param boolean $safe 安全模式 * @param boolean $safe 安全模式
* @param string $attachment 下载名称
* @return array * @return array
*/ */
public function set($name, $file, $safe = false) public function set($name, $file, $safe = false, $attachment = null)
{ {
$token = $this->buildUploadToken($name); $token = $this->buildUploadToken($name);
$data = ['key' => $name]; $data = ['key' => $name];
@ -109,6 +110,9 @@ class AliossStorage extends Storage
$data['Signature'] = $token['signature']; $data['Signature'] = $token['signature'];
$data['OSSAccessKeyId'] = $this->accessKey; $data['OSSAccessKeyId'] = $this->accessKey;
$data['success_action_status'] = '200'; $data['success_action_status'] = '200';
if (is_string($attachment) && strlen($attachment) > 0) {
$data['Content-Disposition'] = "attachment;filename=" . urlencode($attachment);
}
$file = ['field' => 'file', 'name' => $name, 'content' => $file]; $file = ['field' => 'file', 'name' => $name, 'content' => $file];
if (is_numeric(stripos(HttpExtend::submit($this->upload(), $data, $file), '200 OK'))) { if (is_numeric(stripos(HttpExtend::submit($this->upload(), $data, $file), '200 OK'))) {
return ['file' => $this->path($name, $safe), 'url' => $this->url($name, $safe), 'key' => $name]; return ['file' => $this->path($name, $safe), 'url' => $this->url($name, $safe), 'key' => $name];