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);
}
相关推荐
Protein_zmm13 小时前
第一章 计算机网络和因特网(下)
服务器·计算机网络·php
依了个旧15 小时前
🚀 告别手写注释!Laravel 自定义命令创建模型时自动生成 @property 属性提示
laravel
q***99415 小时前
IPV6公网暴露下的OPENWRT防火墙安全设置(只允许访问局域网中指定服务器指定端口其余拒绝)
服务器·安全·php
u***u68516 小时前
PHP在电商中的WooCommerce
开发语言·php
冠希陈、16 小时前
PHP 过滤敏感词(含类库)
开发语言·php·内容敏感词
v***870417 小时前
QoS质量配置
开发语言·智能路由器·php
JaguarJack18 小时前
不用 Web 服务器也能跑 PHP?这事比你想的有意思
php·服务端
一生要强的ymy20 小时前
Polar PHP是世界上最好的语言(困难)
开发语言·php
胡八一2 天前
解决PHP未检测到您服务器环境的sqlite3数据库扩展报错
服务器·数据库·php
名字不相符2 天前
攻防世界WEB难度一(个人记录)
学习·php·web·萌新