Laravel——文件如何上传至腾讯云COS存储桶
·
一、定义路由
//文件上传
Route::group(['prefix' => 'global'], function () {
Route::post('/upload', 'GlobalController@upload');
});
二、在对应控制器完善接口:将文件信息保存至本地
/**
* 文件上传
* @param stream $file *文件流
* @param string $type *类型:文件file,图片img,视频video,多媒体编辑器editor
*/
public function upload(Request $request): JsonResponse
{
$rules = [
'file' => 'required|file',
];
$this->validate($request, $rules);
$file = $request->file('file'); //获取文件
$name = $request->input('name'); //自定义文件名
$size = $file->getSize(); //文件大小 单位:字节
$extension = $file->getClientOriginalExtension(); //文件格式
$filename = date('YmdHis') . uniqid() . '.' . $extension; //重定义文件名
$path = $file->storeAs($extension, $filename); //本地url
$file = FileModel::create(compact('extension', 'path', 'name', 'size'));
if ($extension == 'editor') {
return response()->json([
'errno' => '0',
'data' => [
[
'url' => $file->path,
'alt' => $file->name,
'href' => ''
]
]
]);
} else {
return $this->success(['id' => $file->id, 'name' => $file->name, 'path' => $file->path, 'type' => $file->extension]);
}
}
三、配置cos信息:
根目录下 config>filesystems.php
'cos' => env('FILESYSTEM_DISK', 'cos'),
'disks' => [
'cos' => [
'driver' => 'cos',
'app_id' => env('COS_APP_ID', '填入app_id'),
'secret_id' => env('COS_SECRET_ID', '填入secret_id'),
'secret_key' => env('COS_SECRET_KEY', '填入secret_key'),
'region' => env('COS_REGION', 'ap-guangzhou'), //地区
'bucket' => env('COS_BUCKET', 'edu-123456789'), // 不带数字-app_id
// 可选,如果 bucket 为私有访问请打开此项
'signed_url' => false,
// 可选,是否使用 https,默认 false
'use_https' => true,
// 可选,自定义域名
'domain' => 'edu-123456789.cos.ap-guangzhou.myqcloud.com',
// 可选,使用 CDN 域名时指定生成的 URL host
'cdn' => env('COS_CDN', ''),
'prefix' => env('COS_PATH_PREFIX', ''), // 全局路径前缀
'guzzle' => [
'timeout' => env('COS_TIMEOUT', 60), //超时时间 秒
'connect_timeout' => env('COS_CONNECT_TIMEOUT', 60), //重连时间 秒
],
],
],
四、封装自定义辅助方法
目录: app/helper.php
if (!function_exists('getFileUrl')) {
function getFileUrl($path, $default_path = '', $disk = '')
{
// 获取cos文件配置信息
$disk = $disk ?: config('filesystems.cos');
if (!empty($path)) {
$http_exists = \Illuminate\Support\Str::startsWith($path, ['https://', 'http://']);
if ($http_exists) {
return $path;
}
return \Illuminate\Support\Facades\Storage::disk($disk)->url($path);
}
return !empty($default_path) ? \Illuminate\Support\Facades\Storage::disk($disk)->url($default_path) : "";
}
}
五、在对应模型里面定义访问器
//访问器命名格式: get+字段名+Attribute
public function getPathAttribute($v)
{
//引入辅助文件封装的getFileUrl函数
return getFileUrl($v);
}
访问接口
更多推荐


所有评论(0)