TP框架-上传apk包文件

TP中的写法,增加了根据文件mime类型二次校验上传文件的类型。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
/**
* @ApiTitle (上传apk文件)
* @ApiSummary (在线升级)
* @ApiMethod (POST)
* @ApiParams (name="apk", type="file", required=true, description="apk包")
*
* @ApiReturnParams (name="version_code", type="string", required=false, description="版本号")
* @ApiReturnParams (name="device_type", type="string", required=false, description="设备类型")
* @ApiReturnParams (name="device_model", type="string", required=false, description="设备型号")
* @ApiReturnParams (name="url", type="string", required=false, description="路径地址")
*/
public function upload_apk()
{
$file_name = key($_FILES);
$file = request()->file($file_name);
if (!$file) {
return $this->error("文件上传失败");
}

if (!$file->checkExt('apk')) {
return $this->error("不允许上传此类型文件!");
}

$path = ROOT_PATH . 'public' . DS . 'upload' . DS . 'apk';
$name = iconv('utf-8', 'gbk', $file->getInfo()['name']);

// 包名格式: 设备型号_版本号.apk
list($device_model, $version_code) = explode('_', $name);
if (empty($device_model) || empty($version_code)) {
return $this->error("文件上传失败,版本号解析异常!");
}
$service = new LibraryUpgrade();
$device_version = $service->get_newest_version($device_model);

$info = $file->move($path, $name);
if (!$info) {
return $this->error("上传失败");
}
$tmp_path = DS . 'upload' . DS . 'apk' . DS . $name;

$save_path = str_replace(DS, "/", $tmp_path);

// 根据文件的mime类型二次校验
$finfo = finfo_open(FILEINFO_MIME_TYPE);
$mime = finfo_file($finfo, '.'.$save_path);
finfo_close($finfo);
if ($mime != 'application/java-archive') {
unlink($path . "/" . $name);
return $this->error("上传失败,文件类型异常!");
}

$return = [
'url' => $save_path,
'version_code' => substr($version_code, 0, -4),
'device_type' => $device_version['device_type'] ?? '',
'device_model' => $device_model
];

return $this->success("成功", $return);
}

本文标题:TP框架-上传apk包文件

文章作者:xugz

发布时间:2019年06月22日 - 17:28

最后更新:2022年06月22日 - 17:29

原始链接:https://xlline.github.io/2019/06/22/Upload_apk/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。