laravel 5.5 管理 oss

背景

网上很多文章都是写的 laravel 上传文件到 oss,如果管理已经上传到文件,没有对应的例子(可能也不需要吧)

配置

在app/filesystems.php中的disks里下添加:

php 复制代码
'disks' => [
    'oss' => [
        'driver'     => 'oss',
        'access_id'  => '',//Your Aliyun OSS AccessKeyId
        'access_key' => '',//Your Aliyun OSS AccessKeySecret
        'bucket'     => '',//OSS bucket name
        'endpoint'   => 'oss-cn-shenzhen.aliyuncs.com', //<the endpoint of OSS, E.g: oss-cn-hangzhou.aliyuncs.com | custom domain, E.g:img.abc.com> OSS 外网节点或自定义外部域名
        //'endpoint_internal' => '', //<internal endpoint [OSS内网节点] 如:oss-cn-shenzhen-internal.aliyuncs.com> v2.0.4 新增配置属性,如果为空,则默认使用 endpoint 配置(由于内网上传有点小问题未解决,请大家暂时不要使用内网节点上传,正在与阿里技术沟通中)
        //'cdnDomain'  => '', //<CDN domain, cdn域名> 如果isCName为true, getUrl会判断cdnDomain是否设定来决定返回的url,如果cdnDomain未设置,则使用endpoint来生成url,否则使用cdn
        'ssl'        => false, // true to use 'https://' and false to use 'http://'. default is false,
        'isCName'    => false, // 是否使用自定义域名,true: 则Storage.url()会使用自定义的cdn或域名生成文件url, false: 则使用外部节点生成url
        'debug'      => true,
    ],
],

依赖

  • "iidestiny/laravel-filesystem-oss": "^1.1",

修改第三方

  • vendor/iidestiny/flysystem-oss/src/OssAdapter.php
php 复制代码
/**
 * File list core method.
 *
 * @param string $dirname
 * @param bool   $recursive
 *
 * @return array
 *
 * @throws OssException
 */
public function listAll($dirname = '', $nextMarker = '', $maxkeys = 10)
{
    $result = [
        'objects' => [],
        'prefix' => [],
        'next' => '',
    ];
    $options = [
        'delimiter' => '/',
        'prefix' => $dirname,
        'max-keys' => $maxkeys,
        'marker' => $nextMarker,
    ];
    try {
        $listObjectInfo = $this->client->listObjects($this->bucket, $options);
    } catch (OssException $exception) {
        throw $exception;
    }
    $nextMarker = $listObjectInfo->getNextMarker();
    $objectList = $listObjectInfo->getObjectList();
    $prefixList = $listObjectInfo->getPrefixList();
    if (!empty($objectList)) {
        foreach ($objectList as $objectInfo) {
            $object['Prefix'] = $dirname;
            $object['Key'] = $objectInfo->getKey();
            $object['LastModified'] = $objectInfo->getLastModified();
            $object['eTag'] = $objectInfo->getETag();
            $object['Type'] = $objectInfo->getType();
            $object['Size'] = $objectInfo->getSize();
            $object['StorageClass'] = $objectInfo->getStorageClass();
            $result['objects'][] = $object;
        }
    } else {
        $result['objects'] = [];
    }
    if (!empty($prefixList)) {
        foreach ($prefixList as $prefixInfo) {
            $result['prefix'][] = $prefixInfo->getPrefix();
        }
    }
    $result['next'] = $nextMarker;
    return $result;
}

使用

php 复制代码
/**
 * 文件列表
 * https://help.aliyun.com/zh/oss/developer-reference/list-objects-6
 * http://www.idcbaby.com/43096/
 */
public function ossList(Request $request) {
    $disk = Storage::disk('oss');
    return $disk->getAdapter()->listAll($request->prefix ?: '', $request->next ?: '', $request->max ?: 10);
}
相关推荐
东宇科技3 小时前
让网页执行cmd命令
php
持敬chijing5 小时前
PHP开发-环境搭建-安装phpstudy-vscode工具
开发语言·vscode·php
MC皮蛋侠客6 小时前
TDengine C++ 系列(6):高性能写入——参数绑定、批量与 Schemaless
c++·php·tdengine
Hello_Damon_Nikola6 小时前
AC7911从入门到精通
开发语言·嵌入式硬件·物联网·php
sbjdhjd8 小时前
大三网安秋招核心学习前言(AI 安全 + Web 漏洞 + 内网渗透全考点)
人工智能·网络协议·学习·安全·网络安全·开源·php
运维行者_9 小时前
企业带宽监控工具实战:网络流量分析与异常排查的5个关键能力
运维·服务器·开发语言·网络·分布式·后端·php
吴声子夜歌10 小时前
正则指引——PHP
开发语言·正则表达式·php
Claire_8810 小时前
企业文件管理系统选型技术框架与主流产品对比分析
开发语言·php
COOLMO研究AI10 小时前
Python 如何给 AI API 实现断路器模式:防止雪崩与保护本地服务
人工智能·python·php
AC赳赳老秦11 小时前
网页公开附件自动采集:OpenClaw 批量下载页面内嵌 Word/Excel 附件,统一格式后结构化入库
java·python·word·php·excel·deepseek·openclaw