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);
}
相关推荐
合作小小程序员小小店44 分钟前
web网页开发,在线%商城,电商,商品购买%系统demo,基于vscode,apache,html,css,jquery,php,mysql数据库
开发语言·前端·数据库·mysql·html·php·电商
JaguarJack1 小时前
15 个 Eloquent 高级技巧,瞬间提升你的 Laravel 应用性能
后端·php·laravel
拾忆,想起2 小时前
TCP滑动窗口:网络世界的“智能流量阀门”
java·网络·数据库·网络协议·tcp/ip·php·哈希算法
Q_Q5110082859 小时前
python+django/flask的眼科患者随访管理系统 AI智能模型
spring boot·python·django·flask·node.js·php
JavaEdge.10 小时前
Cursor 2.0 扩展 Composer 功能,助力上下文感知式开发
php·composer
Q_Q51100828511 小时前
python+django/flask的在线学习系统的设计与实现 积分兑换礼物
spring boot·python·django·flask·node.js·php
Q_Q51100828511 小时前
python+django/flask的车辆尾气检测排放系统-可视化大屏展示
spring boot·python·django·flask·node.js·php
2501_9151063213 小时前
App HTTPS 抓包 工程化排查与工具组合实战
网络协议·ios·小程序·https·uni-app·php·iphone
Q_Q196328847514 小时前
python+django/flask基于Echarts+Python的图书零售监测系统设计与实现(带大屏)
spring boot·python·django·flask·node.js·php
Q_Q51100828518 小时前
python+django/flask的莱元元电商数据分析系统_电商销量预测
spring boot·python·django·flask·node.js·php