Files
mier-php/application/admin/model/Upload.php

209 lines
7.7 KiB
PHP
Raw Normal View History

2025-08-11 10:22:05 +08:00
<?php
namespace app\admin\model;
use think\Model;
use Qiniu\Storage\UploadManager;
use Qiniu\Auth;
use think\facade\Env;
use Qcloud\Cos\Client;
class Upload extends Model
{
//单文件上传
public function single_file_upload($file, $file_category_name = 'all')
{
//判断上传方式
$config = get_system_config();
if ($config['file_upload_type'] == 1) {
$reslut = $this->local_upload($file, $file_category_name);
} elseif ($config['file_upload_type'] == 2) {
$reslut = $this->qiniu_upload($file, $file_category_name);
}elseif ($config['file_upload_type'] == 3) {
$reslut = $this->tencent_upload($file, $file_category_name);
}
return $reslut;
}
public function server_local_upload($filePath){
$config = get_system_config();
$accessKey = $config['qiniu_access_key'];
$secretKey = $config['qiniu_secret_key'];
$bucket = $config['qiniu_bucket_name'];
// 构建鉴权对象
$auth = new Auth($accessKey, $secretKey);
// 生成上传 Token
$token = $auth->uploadToken($bucket);
// 初始化 UploadManager 对象并进行文件的上传。
$uploadMgr = new UploadManager();
// 调用 UploadManager 的 putFile 方法进行文件的上传。
$local_filePath= Env::get('root_path')."/public/".$filePath;
list($ret, $err) = $uploadMgr->putFile($token, $filePath, $local_filePath);
if ($err !== null) {
return ['code' => 201, 'msg' => "上传失败", 'data' => null];
} else {
$data = [];
$data['image_path'] = $ret['key'];
$data['size'] = 0;
$data['http_image_path'] = localpath_to_netpath($ret['key']);
return ['code' => 200, 'msg' => "上传成功", 'data' => $data];
}
}
public function local_upload($file, $file_category_name = 'all')
{
// // 获取表单上传文件 例如上传了001.jpg
// 移动到框架应用根目录/uploads/ 目录下
$root_path = 'public/uploads/' . $file_category_name;
mkdirs($root_path); //创建文件
$info = $file->validate(['ext' => 'jpeg,jpg,png,gif,mp4,mp3,wgt,svga'])->move('./uploads/' . $file_category_name);
if ($info) {
$file_info = $info->getInfo();
// 成功上传后 获取上传信息
// 输出 jpg
// echo $info->getExtension();
// // 输出 20160820/42a79759f284b767dfcb2a0197904287.jpg
// echo $info->getSaveName();
// // 输出 42a79759f284b767dfcb2a0197904287.jpg
// echo $info->getFilename();
$image_path = '/uploads/' . $file_category_name . '/' . $info->getSaveName(); //返回的地址
$image_path = str_replace("\\", "/", $image_path);
$img['image_path'] = $image_path;
$img['size'] = $file_info['size'];
$img['http_image_path'] = localpath_to_netpath($image_path);
return ['code' => 200, 'msg' => '上传成功', 'data' => $img];
} else {
return ['code' => 201, 'msg' => '上传失败', 'data' => null];
}
}
public function qiniu_upload($file, $file_category_name = 'all')
{
$config = get_system_config();
$accessKey = $config['qiniu_access_key'];
$secretKey = $config['qiniu_secret_key'];
$bucket = $config['qiniu_bucket_name'];
if (empty($file)) {
return ['code' => 201, 'msg' => '请上传文件', 'data' => null];
}
$validate_reslut = $file->validate(['ext' => 'jpeg,jpg,png,gif,mp4,mp3,wgt,svga'])->check();
if (!$validate_reslut) {
return ['code' => 201, 'msg' => '非法上传存储类型', 'data' => null];
}
$extension = strtolower(pathinfo($file->getInfo('name'), PATHINFO_EXTENSION));
$file_info = $file->getInfo();
// 构建鉴权对象
$auth = new Auth($accessKey, $secretKey);
// 生成上传 Token
$token = $auth->uploadToken($bucket);
// 要上传文件的本地路径
$filePath = $file_info['tmp_name'];
// 上传到存储后保存的文件名
$savename = date('Ymd') . '/' . md5(microtime(true)) . ".$extension";
$key = $file_category_name . '/' . $savename;
// 初始化 UploadManager 对象并进行文件的上传。
$uploadMgr = new UploadManager();
// 调用 UploadManager 的 putFile 方法进行文件的上传。
list($ret, $err) = $uploadMgr->putFile($token, $key, $filePath);
if ($err !== null) {
return ['code' => 201, 'msg' => "上传失败", 'data' => null];
} else {
$data = [];
$data['image_path'] = $ret['key'];
$data['size'] = $file_info['size'];
$data['http_image_path'] = localpath_to_netpath($ret['key']);
return ['code' => 200, 'msg' => "上传成功", 'data' => $data];
}
}
public function get_qiniu_upload_token()
{
$config = get_system_config();
$accessKey = $config['qiniu_access_key'];
$secretKey = $config['qiniu_secret_key'];
$bucket = $config['qiniu_bucket_name'];
$auth = new Auth($accessKey, $secretKey);
$token = $auth->uploadToken($bucket);
return ['code' => 200, 'msg' => '获取成功', 'data' => ['token' => $token]];
}
public function tencent_upload($file, $file_category_name = 'all')
{
$config = get_system_config();
$secretId = $config['tencent_secret_id'];
// $secretId = 111111;
$secretKey = $config['tencent_secret_key'];
$region = $config['tencent_territory'];
$bucket = $config['tencent_bucket_name'];
if (empty($file)) {
return ['code' => 201, 'msg' => '请上传文件', 'data' => null];
}
// dump($file);exit;
$validate_reslut = $file->validate(['ext' => 'jpeg,jpg,png,gif,mp4,mp3,wgt,svga'])->check();
// dump($file);exit;
if (!$validate_reslut) {
return ['code' => 201, 'msg' => '非法上传存储类型', 'data' => null];
}
$extension = strtolower(pathinfo($file->getInfo('name'), PATHINFO_EXTENSION));
$file_info = $file->getInfo();
// 构建鉴权对象
$cosClient = new Client(
array(
'region' => $region,
'schema' => 'https', //协议头部默认为http
'credentials'=> array(
'secretId' => $secretId ,
'secretKey' => $secretKey
)
)
);
// 要上传文件的本地路径
$filePath = $file_info['tmp_name'];
// 上传到存储后保存的文件名
$savename = date('Ymd') . '/' . md5(microtime(true)) . ".$extension";
$key = $file_category_name . '/' . $savename;
// 初始化 UploadManager 对象并进行文件的上传。
$file = fopen($filePath, "rb");
if ($file) {
$result = $cosClient->putObject(array(
'Bucket' => $bucket,
'Key' => $key,
'Body' => $file)
);
$data = [];
$data['image_path'] = $result['Key'];
$data['size'] = $file_info['size'];
$data['http_image_path'] = localpath_to_netpath($result['Key']);
$data['mp4_task_id'] = '';
$data['extension'] = $extension;
return ['code' => 200, 'msg' => "上传成功", 'data' => $data];
}else{
return ['code' => 201, 'msg' => "上传失败", 'data' => null];
}
}
}