Laravel 上传文件到阿里云
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Laravel 上传文件到阿里云相关的知识,希望对你有一定的参考价值。
-
在laravel 安装的根目录下,执行命令 composer require aliyuncs/oss-sdk-php 下载阿里云sdk。
- 代码实现,上传文件类
use OSSCoreOssException; use OSSOssClient;
//上传图片
class uploadImgCombine
{
/**
- 上传本地图片到oss
- @param string $sourcePath 本地源文件地址
- @param string $format 保存的文件后缀
- @param string $imgFullName 自定义保存的文件名+后缀
- @param string $folder 自定义保存的目录 如 product
- @param boolean $save 是否保存到数据库
-
@return array|string
*/
public function uploadLocalToOss($sourcePath, $format = ‘jpg‘, $imgFullName = ‘‘, $folder = ‘‘, $save = false)
{
//检查图片是否是OSS地址
if (!file_exists($sourcePath))
{
return [‘msg‘ => ‘文件不存在‘, ‘code‘ => 1001];
}// 文件名称(传到OOS后要保证唯一,重名的无法上传) $object = $imgFullName ? $imgFullName : date(‘YmdHis‘).CommonHelpers::rand(4, 0).‘.‘.$format; //oss保存地址 $ossSaveFilePath = $folder ? $folder.‘/‘.$object : $object; //读取配置 //$conf = json_decode(getenv(‘ALIYUN‘), true); //$accessKeyId = $conf[‘appkey‘] ?? ‘‘; //$accessKeySecret = $conf[‘secret‘] ?? ‘‘; //$endpoint = $conf[‘endpoint‘] ?? ‘‘; $accessKeyId = env(‘ALIYUN_ACCESS_KEY_ID‘); $accessKeySecret = env(‘ALIYUN_ACCESS_KEY_SECRET‘); $endpoint = env(‘ALIYUN_OSS_ENDPOINT‘); // 存储空间名称 $bucket = env(‘ALIYUN_OSS_BUCKET‘) ?? ‘‘; try { //上传 $ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint); $rel = $ossClient->uploadFile($bucket, $ossSaveFilePath, $sourcePath); } catch (OssException $e) { return [‘msg‘ => $e->getMessage(), ‘code‘ => $e->getCode()]; } //验证是否上传成功 if (isset($rel[‘oss-request-url‘])) { $id = ‘‘; //保存到数据库 /*if($save) { $id = CommonImageModel::saveOneData([ ‘root_url‘ => $ossSaveFilePath, ‘small_url‘ => $ossSaveFilePath, ‘create_time‘ => time(), ‘origin_url‘ => ‘‘, ]); }*/ return [ ‘filePath‘ => env(‘ALIYUN_OSS_URL‘) . $ossSaveFilePath, ‘id‘ => $id ]; } //返回 return [‘msg‘ => ‘上传失败‘, ‘code‘ => 1201];
}
}
使用这个类
if(empty($attachment)){
return JsonResult::fail([],‘请上传文件‘);
}
if($attachment->getSize() > 300*1024*1024)
{
return JsonResult::fail([],‘上传作品不能超过300M‘);
}
if(!$attachment || !$attachment->isValid())
{
return JsonResult::fail([],‘上传作品失败‘);
}
//上传
$filePath = $attachment->getRealPath(); //获取文件临时存放位置
$format = $attachment->getClientOriginalExtension();//上传文件的后缀
$result = (new uploadImgCombine())->uploadLocalToOss($filePath, $format, ‘‘, ‘work‘, true);
//返回
if(isset($result[‘msg‘]))
{
return JsonResult::fail([], $result[‘msg‘], $result[‘code‘]);
}
$attachment_path = $result[‘filePath‘];
以上是关于Laravel 上传文件到阿里云的主要内容,如果未能解决你的问题,请参考以下文章