|
|
|
<?php
|
|
|
|
|
|
|
|
namespace app\home\controller;
|
|
|
|
|
|
|
|
use app\home\validate\UploadValidate;
|
|
|
|
use app\model\AwsS3Model;
|
|
|
|
use app\model\ConfigModel;
|
|
|
|
use app\model\FileModel;
|
|
|
|
use Aws\S3\S3Client;
|
|
|
|
use think\exception\ValidateException;
|
|
|
|
use think\facade\Config;
|
|
|
|
use think\facade\Filesystem;
|
|
|
|
use think\facade\Log;
|
|
|
|
use think\response\Json;
|
|
|
|
|
|
|
|
|
|
|
|
class Upload extends HomeBaseController
|
|
|
|
{
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @desc 上传用户头像
|
|
|
|
* @return Json
|
|
|
|
*/
|
|
|
|
public function uploadHeaderImage(): Json
|
|
|
|
{
|
|
|
|
try {
|
|
|
|
// 获取文件
|
|
|
|
$file = $this->request->file('file');
|
|
|
|
if (!$file) {
|
|
|
|
return json(['code' => 400, 'message' => 'No file uploaded']);
|
|
|
|
}
|
|
|
|
// 参数校验
|
|
|
|
validate(UploadValidate::class)->scene('uploadImage')->check(['image' => $file]);
|
|
|
|
$maxSize = 15 * 1024 * 1024; //限制15M
|
|
|
|
if ($file->getSize() > $maxSize) {
|
|
|
|
return json(['code' => 400, 'message' => 'Upload file is too large']);
|
|
|
|
}
|
|
|
|
$fileName = bin2hex(random_bytes(16)) . '.' . $file->getOriginalExtension();
|
|
|
|
// 初始化s3客户端
|
|
|
|
$s3Config = Config::get('common.aws_s3');
|
|
|
|
$s3Client = new S3Client([
|
|
|
|
'version' => '2006-03-01',
|
|
|
|
'region' => $s3Config['aws_region'],
|
|
|
|
'credentials' => [
|
|
|
|
'key' => $s3Config['aws_key'],
|
|
|
|
'secret' => $s3Config['aws_secret'],
|
|
|
|
],
|
|
|
|
]);
|
|
|
|
// 上传文件到S3
|
|
|
|
$result = $s3Client->putObject([
|
|
|
|
'Bucket' => $s3Config['aws_bucket'],
|
|
|
|
'Key' => 'bourse-avatar/' . $fileName, // s3中的存储路径
|
|
|
|
'Body' => fopen($file->getRealPath(), 'r'),
|
|
|
|
'ContentType' => $file->getOriginalMime(), // 设置文件的MIME, 不然s3会以流式存储
|
|
|
|
]);
|
|
|
|
if (empty($result) || empty($result['ObjectURL'])) {
|
|
|
|
return json(['code' => 400, 'message' => lang('upload_failed')]);
|
|
|
|
}
|
|
|
|
// 记录上传的文件
|
|
|
|
$resData = AwsS3Model::create([
|
|
|
|
'name' => $fileName,
|
|
|
|
's3_url' => $result['ObjectURL'],
|
|
|
|
'size' => $file->getSize(),
|
|
|
|
'mime' => $file->getOriginalMime(),
|
|
|
|
'ext' => $file->getOriginalExtension(),
|
|
|
|
]);
|
|
|
|
return json(['code' => '0', 'message' => lang('upload_successfully'), 'data' => [
|
|
|
|
'id' => $resData->id,
|
|
|
|
'url' => $result['ObjectURL'],
|
|
|
|
'name' => $fileName,
|
|
|
|
'size' => $file->getSize(),
|
|
|
|
'mime' => $file->getOriginalMime(),
|
|
|
|
'ext'=> $file->getOriginalExtension(),
|
|
|
|
]]);
|
|
|
|
}catch (ValidateException $validateException){
|
|
|
|
return json(['code' => '1004001', 'message' => $validateException->getError()]);
|
|
|
|
}catch (\Exception $exception){
|
|
|
|
return json(['code' => '100500', 'message' => 'System error', 'data' => [$exception->getMessage(), $exception->getTrace(), $exception->getFile()]]);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
public function uploadRechargeImage(): Json
|
|
|
|
{
|
|
|
|
try {
|
|
|
|
// 获取文件
|
|
|
|
$file = $this->request->file('file');
|
|
|
|
// 参数校验
|
|
|
|
validate(UploadValidate::class)->scene('uploadImage')->check(['image' => $file]);
|
|
|
|
|
|
|
|
// 将文件存储在本地
|
|
|
|
$name = Filesystem::disk('local')->putFile('', $file);
|
|
|
|
$path = '/bs/image/'.$name;
|
|
|
|
|
|
|
|
// 入库
|
|
|
|
$id = FileModel::insertFile($path, 2);
|
|
|
|
return json(['code' => '0', 'message' => 'Request successful.','data' => ['id' => $id]]);
|
|
|
|
}catch (\Exception $exception){
|
|
|
|
return json(['code' => '100500', 'message' => 'System error','data' => [$exception->getMessage()]]);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
public function getConfig(): Json
|
|
|
|
{
|
|
|
|
try {
|
|
|
|
$param = $this->request->param();
|
|
|
|
if (empty($param['name'])) return json(['code' => '1', 'message' => lang('parameter_error'), 'data' => []]);
|
|
|
|
$name = $param['name'];
|
|
|
|
$value = ConfigModel::where('name', $name)->value('value');
|
|
|
|
|
|
|
|
return json(['code' => '0', 'message' => 'Request successful.', 'data' => ['value' => $value]]);
|
|
|
|
} catch (\Exception $exception) {
|
|
|
|
return json(['code' => '100500', 'message' => 'System error', 'data' => [$exception->getMessage()]]);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|