切换导航条
此项目
正在载入...
登录
王智
/
baoxiu
·
提交
转到一个项目
GitLab
转到仪表盘
项目
活动
文件
提交
管道
0
构建
0
图表
里程碑
问题
0
合并请求
0
成员
标记
维基
派生
网络
创建新的问题
下载为
邮件补丁
差异文件
浏览文件
作者
王智
4 years ago
提交
b88b66ec81095bc582415f23700d422ef21d339d
1 个父辈
cc8dc9c1
baoxiu
隐藏空白字符变更
内嵌
并排对比
正在显示
1 个修改的文件
包含
92 行增加
和
69 行删除
application/api/controller/Common.php
application/api/controller/Common.php
查看文件 @
b88b66e
...
...
@@ -7,13 +7,15 @@ use app\common\model\Area;
use
app\common\model\Version
;
use
fast\Random
;
use
think\Config
;
use
app\common\model\Attachment
;
use
addons\qiniu\library\Auth
;
/**
* 公共接口
*/
class
Common
extends
Api
{
protected
$noNeedLogin
=
[
'
init
'
];
protected
$noNeedLogin
=
[
'
*
'
];
protected
$noNeedRight
=
'*'
;
/**
...
...
@@ -41,102 +43,123 @@ class Common extends Api
}
/**
* 上传文件
* @ApiMethod (POST)
* @param File $file 文件流
* 上传文件-七牛
*
* @ApiTitle (上传文件-七牛)
* @ApiSummary (测试描述信息)
* @ApiMethod (POST)
* @ApiParams (name="file", type="file", required=true, description="用户名")
*/
public
function
upload
()
public
function
upload
Qiniu
()
{
$config
=
get_addon_config
(
'qiniu'
);
$file
=
$this
->
request
->
file
(
'file'
);
if
(
empty
(
$file
))
{
$this
->
error
(
__
(
'No file upload or server upload limit exceeded'
));
if
(
!
$file
||
!
$file
->
isValid
())
{
$this
->
error
(
"请上传有效的文件"
);
}
$fileInfo
=
$file
->
getInfo
();
//判断是否已经存在附件
$sha1
=
$file
->
hash
();
$upload
=
Config
::
get
(
'upload'
);
preg_match
(
'/(\d+)(\w+)/'
,
$upload
[
'maxsize'
],
$matches
);
$filePath
=
$file
->
getRealPath
()
?:
$file
->
getPathname
();
preg_match
(
'/(\d+)(\w+)/'
,
$config
[
'maxsize'
],
$matches
);
$type
=
strtolower
(
$matches
[
2
]);
$typeDict
=
[
'b'
=>
0
,
'k'
=>
1
,
'kb'
=>
1
,
'm'
=>
2
,
'mb'
=>
2
,
'gb'
=>
3
,
'g'
=>
3
];
$size
=
(
int
)
$upload
[
'maxsize'
]
*
pow
(
1024
,
isset
(
$typeDict
[
$type
])
?
$typeDict
[
$type
]
:
0
);
$fileInfo
=
$file
->
getInfo
();
$size
=
(
int
)
$config
[
'maxsize'
]
*
pow
(
1024
,
isset
(
$typeDict
[
$type
])
?
$typeDict
[
$type
]
:
0
);
$suffix
=
strtolower
(
pathinfo
(
$fileInfo
[
'name'
],
PATHINFO_EXTENSION
));
$suffix
=
$suffix
&&
preg_match
(
"/^[a-zA-Z0-9]+$/"
,
$suffix
)
?
$suffix
:
'file'
;
$suffix
=
$suffix
?
$suffix
:
'file'
;
$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'
]),
'/'
);
$mimetypeArr
=
explode
(
','
,
strtolower
(
$
upload
[
'mimetype'
]));
$mimetypeArr
=
explode
(
','
,
strtolower
(
$
config
[
'mimetype'
]));
$typeArr
=
explode
(
'/'
,
$fileInfo
[
'type'
]);
//禁止上传PHP和HTML文件
if
(
in_array
(
$fileInfo
[
'type'
],
[
'text/x-php'
,
'text/html'
])
||
in_array
(
$suffix
,
[
'php'
,
'html'
,
'htm'
]))
{
$this
->
error
(
__
(
'Uploaded file format is limited'
));
//检查文件大小
if
(
!
$file
->
checkSize
(
$size
))
{
$this
->
error
(
"起过最大可上传文件限制"
);
}
//验证文件后缀
if
(
$
upload
[
'mimetype'
]
!==
'*'
&&
if
(
$
config
[
'mimetype'
]
!==
'*'
&&
(
!
in_array
(
$suffix
,
$mimetypeArr
)
||
(
stripos
(
$typeArr
[
0
]
.
'/'
,
$
upload
[
'mimetype'
])
!==
false
&&
(
!
in_array
(
$fileInfo
[
'type'
],
$mimetypeArr
)
&&
!
in_array
(
$typeArr
[
0
]
.
'/*'
,
$mimetypeArr
)))
||
(
stripos
(
$typeArr
[
0
]
.
'/'
,
$
config
[
'mimetype'
])
!==
false
&&
(
!
in_array
(
$fileInfo
[
'type'
],
$mimetypeArr
)
&&
!
in_array
(
$typeArr
[
0
]
.
'/*'
,
$mimetypeArr
)))
)
)
{
$this
->
error
(
__
(
'
Uploaded file format is limited
'
));
$this
->
error
(
__
(
'
上传格式限制
'
));
}
//验证是否为图片文件
$imagewidth
=
$imageheight
=
0
;
if
(
in_array
(
$fileInfo
[
'type'
],
[
'image/gif'
,
'image/jpg'
,
'image/jpeg'
,
'image/bmp'
,
'image/png'
,
'image/webp'
])
||
in_array
(
$suffix
,
[
'gif'
,
'jpg'
,
'jpeg'
,
'bmp'
,
'png'
,
'webp'
]))
{
$imgInfo
=
getimagesize
(
$fileInfo
[
'tmp_name'
]);
if
(
!
$imgInfo
||
!
isset
(
$imgInfo
[
0
])
||
!
isset
(
$imgInfo
[
1
]))
{
$this
->
error
(
__
(
'Uploaded file is not a valid image'
));
}
$imagewidth
=
isset
(
$imgInfo
[
0
])
?
$imgInfo
[
0
]
:
$imagewidth
;
$imageheight
=
isset
(
$imgInfo
[
1
])
?
$imgInfo
[
1
]
:
$imageheight
;
}
$replaceArr
=
[
'{year}'
=>
date
(
"Y"
),
'{mon}'
=>
date
(
"m"
),
'{day}'
=>
date
(
"d"
),
'{hour}'
=>
date
(
"H"
),
'{min}'
=>
date
(
"i"
),
'{sec}'
=>
date
(
"s"
),
'{random}'
=>
Random
::
alnum
(
16
),
'{random32}'
=>
Random
::
alnum
(
32
),
'{filename}'
=>
$suffix
?
substr
(
$fileInfo
[
'name'
],
0
,
strripos
(
$fileInfo
[
'name'
],
'.'
))
:
$fileInfo
[
'name'
],
'{suffix}'
=>
$suffix
,
'{.suffix}'
=>
$suffix
?
'.'
.
$suffix
:
''
,
'{filemd5}'
=>
md5_file
(
$fileInfo
[
'tmp_name'
]),
];
$savekey
=
$upload
[
'savekey'
];
$savekey
=
str_replace
(
array_keys
(
$replaceArr
),
array_values
(
$replaceArr
),
$savekey
);
$savekey
=
'/'
.
$object
;
$uploadDir
=
substr
(
$savekey
,
0
,
strripos
(
$savekey
,
'/'
)
+
1
);
$fileName
=
substr
(
$savekey
,
strripos
(
$savekey
,
'/'
)
+
1
);
//
$splInfo
=
$file
->
validate
([
'size'
=>
$size
])
->
move
(
ROOT_PATH
.
'/public'
.
$uploadDir
,
$fileName
);
//先上传到本地
$splInfo
=
$file
->
move
(
ROOT_PATH
.
'/public'
.
$uploadDir
,
$fileName
);
if
(
$splInfo
)
{
$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'
,
'pdf'
]))
{
$imgInfo
=
getimagesize
(
$splInfo
->
getPathname
());
$imagewidth
=
isset
(
$imgInfo
[
0
])
?
$imgInfo
[
0
]
:
$imagewidth
;
$imageheight
=
isset
(
$imgInfo
[
1
])
?
$imgInfo
[
1
]
:
$imageheight
;
}
$params
=
array
(
'admin_id'
=>
0
,
'user_id'
=>
(
int
)
$this
->
auth
->
id
,
'filesize'
=>
$fileInfo
[
'size'
],
'imagewidth'
=>
$imagewidth
,
'admin_id'
=>
session
(
'admin.id'
),
'user_id'
=>
$this
->
auth
->
id
,
'filesize'
=>
$fileInfo
[
'size'
],
'imagewidth'
=>
$imagewidth
,
'imageheight'
=>
$imageheight
,
'imagetype'
=>
$suffix
,
'imagetype'
=>
$suffix
,
'imageframes'
=>
0
,
'mimetype'
=>
$fileInfo
[
'type'
],
'url'
=>
$uploadDir
.
$splInfo
->
getSaveName
(),
'uploadtime'
=>
time
(),
'storage'
=>
'local'
,
'sha1'
=>
$sha1
,
'mimetype'
=>
$fileInfo
[
'type'
],
'url'
=>
$uploadDir
.
$splInfo
->
getSaveName
(),
'uploadtime'
=>
time
(),
'storage'
=>
'local'
,
'sha1'
=>
$sha1
,
'extparam'
=>
json_encode
(
$extparam
),
);
$attachment
=
Attachment
::
create
(
array_filter
(
$params
),
true
);
$policy
=
array
(
'saveKey'
=>
ltrim
(
$savekey
,
'/'
),
);
$attachment
=
model
(
"attachment"
);
$attachment
->
data
(
array_filter
(
$params
));
$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'
;
$attachment
->
save
();
\think\Hook
::
listen
(
"upload_after"
,
$attachment
);
$this
->
success
(
__
(
'Upload successful'
),
[
'url'
=>
$uploadDir
.
$splInfo
->
getSaveName
()
]);
$this
->
success
(
"上传成功"
,
$url
);
}
else
{
// 上传失败获取错误信息
$this
->
error
(
$file
->
getError
());
$this
->
error
(
'上传失败'
);
}
return
;
}
}
...
...
请
注册
或
登录
后发表评论