PHP code example of vergil-lai / laravel-oss-filesystem

1. Go to this page and download the library: Download vergil-lai/laravel-oss-filesystem library. Choose the download type require.

2. Extract the ZIP file and open the index.php.

3. Add this code to the index.php.
    
        
<?php
require_once('vendor/autoload.php');

/* Start to develop here. Best regards https://php-download.com/ */

    

vergil-lai / laravel-oss-filesystem example snippets


'disks' => [
    // ...

    'oss' => [
        // Laravel filesystem 驱动名称,固定为 oss。
        'driver' => 'oss',

        // 自定义 SDK 凭证提供器;配置后优先于下面的静态凭证。
        'credentials_provider' => null,
        // 阿里云 AccessKey ID。
        'access_key_id' => env('OSS_ACCESS_KEY_ID'),
        // 阿里云 AccessKey Secret。
        'access_key_secret' => env('OSS_ACCESS_KEY_SECRET'),
        // 使用 STS 临时凭证时的 Security Token,长期凭证无需配置。
        'security_token' => env('OSS_SESSION_TOKEN'),

        // 请求签名版本,支持 v4 和 v1,默认使用 v4。
        'signature_version' => env('OSS_SIGNATURE_VERSION', 'v4'),
        // Bucket 所在地域;使用 V4 签名时必须正确配置。
        'region' => env('OSS_REGION', 'cn-hangzhou'),
        // 要访问的 OSS Bucket 名称。
        'bucket' => env('OSS_BUCKET'),
        // 自定义 OSS Endpoint;留空时由 SDK 根据地域和模式生成。
        'endpoint' => env('OSS_ENDPOINT'),
        // 绑定到当前 Bucket 的自定义 CNAME 域名;use_cname 为 true 时优先作为 SDK Endpoint。
        'domain' => env('OSS_DOMAIN'),

        // Disk 内所有对象键统一添加的路径前缀。
        'root' => env('OSS_ROOT', ''),
        // 生成公开 URL 时使用的自定义基础地址。
        'url' => env('OSS_URL'),
        // 默认可见性,可设为 private 或 public。
        'visibility' => env('OSS_VISIBILITY', 'private'),
        // 操作失败时是否抛出 Flysystem 异常。
        'throw' => env('OSS_THROW', false),

        // SDK 发起 HTTP 请求时使用的代理地址。
        'proxy_host' => env('OSS_PROXY_HOST', env('OSS_PROXY')),
        // 追加到 SDK User-Agent 请求头的自定义标识。
        'user_agent' => env('OSS_USER_AGENT'),
        // 建立连接的超时时间,单位为秒。
        'connect_timeout' => env('OSS_CONNECT_TIMEOUT'),
        // 读写请求的超时时间,单位为秒。
        'read_write_timeout' => env('OSS_READ_WRITE_TIMEOUT'),
        // API 请求失败后的最大尝试次数。
        'retry_max_attempts' => env('OSS_RETRY_MAX_ATTEMPTS'),
        // 自定义 SDK 重试器;留空时使用 SDK 默认重试器。
        'retryer' => null,

        // Endpoint 是否为绑定到 Bucket 的自定义 CNAME 域名。
        'use_cname' => env('OSS_USE_CNAME', false),
        // 是否使用路径风格地址,即在 URL 路径中携带 Bucket 名称。
        'use_path_style' => env('OSS_USE_PATH_STYLE', false),
        // 是否使用阿里云内网 Endpoint。
        'use_internal_endpoint' => env('OSS_USE_INTERNAL_ENDPOINT', false),
        // 是否使用 OSS 传输加速 Endpoint。
        'use_accelerate_endpoint' => env('OSS_USE_ACCELERATE_ENDPOINT', false),
        // 是否使用同时支持 IPv4 和 IPv6 的双栈 Endpoint。
        'use_dual_stack_endpoint' => env('OSS_USE_DUAL_STACK_ENDPOINT', false),
        // 是否禁用 HTTPS 并改用 HTTP。
        'disable_ssl' => env('OSS_DISABLE_SSL', false),
        // 是否允许 HTTP 请求自动跟随重定向。
        'enabled_redirect' => env('OSS_ENABLED_REDIRECT', false),
        // 是否跳过 TLS 证书校验;仅应在受控环境中启用。
        'insecure_skip_verify' => env('OSS_INSECURE_SKIP_VERIFY', false),

        // V4 签名时需要额外纳入签名计算的请求头名称。
        'additional_headers' => [],
        // 阿里云云盒 ID;仅在使用云盒 OSS 时配置。
        'cloud_box_id' => env('OSS_CLOUD_BOX_ID'),
        // 是否让 SDK 自动探测阿里云云盒 ID。
        'enable_auto_detect_cloud_box_id' => env('OSS_ENABLE_AUTO_DETECT_CLOUD_BOX_ID', false),

        // 传给底层 Guzzle HTTP 客户端的自定义选项。
        'client_options' => [],
    ],
],

use AlibabaCloud\Oss\V2\Credentials\EnvironmentVariableCredentialsProvider;
use AlibabaCloud\Oss\V2\Retry\StandardRetryer;

public function register(): void
{
    config()->set(
        'filesystems.disks.oss.credentials_provider',
        new EnvironmentVariableCredentialsProvider(),
    );

    config()->set(
        'filesystems.disks.oss.retryer',
        new StandardRetryer(maxAttempts: 5),
    );
}

'oss' => [
    'driver' => 'oss',
    // ...
    'client_options' => [
        'request_options' => [
            'connect_timeout' => 10.0,
            'timeout' => 30.0,
        ],
    ],
],

public function register(): void
{
    config()->set(
        'filesystems.disks.oss.client_options.handler',
        $handler,
    );
}

use AlibabaCloud\Oss\V2\Client;
use AlibabaCloud\Oss\V2\Config as OssConfig;
use AlibabaCloud\Oss\V2\Credentials\EnvironmentVariableCredentialsProvider;

$sdkConfig = OssConfig::loadDefault();
$sdkConfig->setRegion('cn-hangzhou');
$sdkConfig->setCredentialsProvider(new EnvironmentVariableCredentialsProvider());

config()->set('filesystems.disks.oss.client', new Client($sdkConfig));

Storage::disk('oss')->put('avatars/me.png', $contents);
$url = Storage::disk('oss')->url('avatars/me.png');
$temporaryUrl = Storage::disk('oss')->temporaryUrl('avatars/me.png', now()->addMinutes(10));
$temporaryUpload = Storage::disk('oss')->temporaryUploadUrl('avatars/me.png', now()->addMinutes(10));