Aliyun Oss Laravel Save

Alibaba Cloud Object Storage Service For Laravel. 阿里云对象存储服务扩展包, 支持最新版的Laravel.

Project README

English | 简体中文

Aliyun OSS Laravel

Latest Stable Version Total Downloads tests License Coverage Status

Banner

This package is a wrapper bridging aliyun-oss-flysystem into Laravel as an available storage disk.
If client direct transmission is required, Use web server signature direct transmission OSS extension package aliyun-oss-appserver.

Compatibility

laravel aliyun-oss-laravel driver readme
>=5.5,<9.0 ^3.0 aliyun readme
>=9.0 ^4.0 oss readme

Installation

  1. If you use the composer to manage project dependencies, run the following command in your project"s root directory:

    composer require alphasnow/aliyun-oss-laravel
    

    Then run composer install to install the dependency.

  2. Modify the environment file .env

    OSS_ACCESS_KEY_ID=<Your aliyun accessKeyId, Required>
    OSS_ACCESS_KEY_SECRET=<Your aliyun accessKeySecret, Required>
    OSS_BUCKET=<Your oss bucket name, Required>
    OSS_ENDPOINT=<Your oss endpoint domain, Required>
    
    1. (Optional) Modify the configuration file config/filesystems.php
      "default" => env("FILESYSTEM_DRIVER", "oss"),
      // ...
      "disks"=>[
          // ...
          "oss" => [
              "driver"            => "oss",
              "access_key_id"     => env("OSS_ACCESS_KEY_ID"),           // Required, yourAccessKeyId
              "access_key_secret" => env("OSS_ACCESS_KEY_SECRET"),       // Required, yourAccessKeySecret
              "bucket"            => env("OSS_BUCKET"),                  // Required, for example: my-bucket
              "endpoint"          => env("OSS_ENDPOINT"),                // Required, for example: oss-cn-shanghai.aliyuncs.com
              "internal"          => env("OSS_INTERNAL", null),          // Optional, for example: oss-cn-shanghai-internal.aliyuncs.com
              "domain"            => env("OSS_DOMAIN", null),            // Optional, for example: oss.my-domain.com
              "is_cname"          => env("OSS_CNAME", false),            // Optional, if the Endpoint is a custom domain name, this must be true, see: https://github.com/aliyun/aliyun-oss-php-sdk/blob/572d0f8e099e8630ae7139ed3fdedb926c7a760f/src/OSS/OssClient.php#L113C1-L122C78
              "prefix"            => env("OSS_PREFIX", ""),              // Optional, the prefix of the store path
              "use_ssl"           => env("OSS_SSL", false),              // Optional, whether to use HTTPS
              "throw"             => env("OSS_THROW", false),            // Optional, whether to throw an exception that causes an error
              "signatureVersion"  => env("OSS_SIGNATURE_VERSION", "v1"), // Optional, select v1 or v4 as the signature version
              "region"            => env("OSS_REGION", ""),              // Optional, for example: cn-shanghai, used only when v4 signature version is selected
              "options"           => [],                                 // Optional, add global configuration parameters, For example: [\OSS\OssClient::OSS_CHECK_MD5 => false]
              "macros"            => []                                  // Optional, add custom Macro, For example: [\App\Macros\ListBuckets::class, \App\Macros\CreateBucket::class]
          ],
          // ...
      ]
      

Usage

use Illuminate\Support\Facades\Storage;
$storage = Storage::disk("oss");

Write

Storage::disk("oss")->putFile("dir/path", "/local/path/file.txt");
Storage::disk("oss")->putFileAs("dir/path", "/local/path/file.txt", "file.txt");

Storage::disk("oss")->put("dir/path/file.txt", file_get_contents("/local/path/file.txt"));
$fp = fopen("/local/path/file.txt","r");
Storage::disk("oss")->put("dir/path/file.txt", $fp);
fclose($fp);

Storage::disk("oss")->prepend("dir/path/file.txt", "Prepend Text"); 
Storage::disk("oss")->append("dir/path/file.txt", "Append Text");

Storage::disk("oss")->put("dir/path/secret.txt", "My secret", "private");
Storage::disk("oss")->put("dir/path/download.txt", "Download content", ["headers" => ["Content-Disposition" => "attachment;filename=download.txt"]]);

Read

Storage::disk("oss")->url("dir/path/file.txt");
Storage::disk("oss")->temporaryUrl("dir/path/file.txt", \Carbon\Carbon::now()->addMinutes(30));

Storage::disk("oss")->get("dir/path/file.txt"); 

Storage::disk("oss")->exists("dir/path/file.txt"); 
Storage::disk("oss")->size("dir/path/file.txt"); 
Storage::disk("oss")->lastModified("dir/path/file.txt");

Delete

Storage::disk("oss")->delete("dir/path/file.txt");
Storage::disk("oss")->delete(["dir/path/file1.txt", "dir/path/file2.txt"]);

File operation

Storage::disk("oss")->copy("dir/path/file.txt", "dir/path/file_new.txt");
Storage::disk("oss")->move("dir/path/file.txt", "dir/path/file_new.txt");
Storage::disk("oss")->rename("dir/path/file.txt", "dir/path/file_new.txt");

Folder operation

Storage::disk("oss")->makeDirectory("dir/path"); 
Storage::disk("oss")->deleteDirectory("dir/path");

Storage::disk("oss")->files("dir/path");
Storage::disk("oss")->allFiles("dir/path");

Storage::disk("oss")->directories("dir/path"); 
Storage::disk("oss")->allDirectories("dir/path"); 

Use Macro

Storage::disk("oss")->appendObject("dir/path/news.txt", "The first line paragraph.", 0);
Storage::disk("oss")->appendObject("dir/path/news.txt", "The second line paragraph.", 25);
Storage::disk("oss")->appendObject("dir/path/news.txt", "The last line paragraph.", 51);

Storage::disk("oss")->appendFile("dir/path/file.zip", "dir/path/file.zip.001", 0);
Storage::disk("oss")->appendFile("dir/path/file.zip", "dir/path/file.zip.002", 1024);
Storage::disk("oss")->appendFile("dir/path/file.zip", "dir/path/file.zip.003", 1024);
Add Custom Macro
  1. Add Macro

    namespace App\Macros;
    use AlphaSnow\LaravelFilesystem\Aliyun\Macros\AliyunMacro;
    
    class ListBuckets implements AliyunMacro
    {
        // ... 
    }
    

    Reference code: AppendObject.php

  2. Modify the config

    [
        "macros" => [\App\Macros\ListBuckets::class]
    ]
    
  3. Use Macro

    Storage::disk("oss")->listBuckets()
    

Use OssClient

use AlphaSnow\LaravelFilesystem\Aliyun\OssClientAdapter;

$adapter = new OssClientAdapter(Storage::disk("oss"));
$adapter->client()->appendObject($adapter->bucket(), $adapter->path("dir/path/file.txt"), "contents", 0, $adapter->options(["visibility" => "private"]));

Documentation

AlibabaCloud Object Storage Service Documentation

Issues

Opening an Issue

Contributors

Star History

Star History Chart

License

MIT

Open Source Agenda is not affiliated with "Aliyun Oss Laravel" Project. README Source: alphasnow/aliyun-oss-laravel

Open Source Agenda Badge

Open Source Agenda Rating