Daisuke Mino bdc2eef3cd fix(gcs): List returns relative path instead of full path (#20)
The GCS List method was returning full paths (attrs.Name) instead of
relative paths (key with prefix stripped). This was inconsistent with
other storage implementations (S3, Local, Azure, Aliyun, Tencent,
Huawei, Volcengine) which all return relative paths.

The original implementation in dify-plugin-daemon PR #237 correctly
used `key`:
https://github.com/langgenius/dify-plugin-daemon/pull/237/files#diff-1efde200d0fa3fafdd827478fdbca6e8b16dee52955cb3c93faab2849f7d95bfR136

This bug was introduced when the code was ported to dify-cloud-kit.

Also added a test assertion to verify that List returns relative paths.

Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-01 20:41:37 +08:00
2025-05-26 16:29:23 +08:00

Dify Cloud Kit

Dify Cloud Kit is a unified abstraction library for integrating various cloud object storage services in Go. It simplifies switching between providers and supports local testing and multi-cloud deployments.

Features

  • Supports multiple backends: Local FS, Aliyun OSS, AWS S3, Azure Blob, Tencent COS, Huawei OBS, Google GCS
  • Unified and clean interface
  • Factory pattern to dynamically load drivers
  • Easy to write tests with local and in-memory backends

📦 Installation

go get github.com/langgenius/dify-cloud-kit

🚀 Quick Start

import (
    "github.com/langgenius/dify-cloud-kit/oss"
    "github.com/langgenius/dify-cloud-kit/oss/factory"
)

func main() {
    store, err := factory.Load("local", oss.OSSArgs{
        Local: &oss.Local{
            Path: "/tmp/files",
        },
    })
    if err != nil {
        panic(err)
    }

    files, _ := store.List("/")
    fmt.Println(files)
}

📁 Supported Storage Providers

Provider Module Path Required Fields
Local oss/local/localfile.go Path
Aliyun OSS oss/aliyun/aliyun.go Endpoint, AccessKey, SecretKey, Bucket
AWS S3 oss/s3/s3.go Region, AccessKey, SecretKey, Bucket
Azure Blob oss/azureblob/blob.go AccountName, AccountKey, Container
Google GCS oss/gcsblob/gcs.go CredentialsJSON, Bucket
Tencent COS oss/tencentcos/cos.go SecretId, SecretKey, Bucket, Region
Huawei OBS oss/huaweiobs/obs.go AK, SK, Endpoint, Bucket
Volcengine TOS oss/volcenginetos/tos.go Endpoint, AccessKey, SecretKey, Bucket

🏗️ Usage with Factory

You can dynamically load a storage backend using the factory:

store, err := factory.Load("s3", oss.OSSArgs{
    S3: &oss.S3{
        Region:    "us-west-2",
        AccessKey: "AKIA...",
        SecretKey: "SECRET...",
        Bucket:    "my-bucket",
    },
})

🧪 Testing

Unit tests are located in tests/oss/oss_test.go.

Environment Variables

Some providers require credentials to be passed via environment variables. Set them as needed:

export OSS_AWS_ACCESS_KEY=your-access-key
export OSS_AWS_SECRET_KEY=your-secret-key
export OSS_AWS_REGION=your-region
export OSS_S3_BUCKET=test-bucket

export OSS_ALIYUN_ENDPOINT=your-endpoint
export OSS_ALIYUN_ACCESS_KEY=your-access-key
export OSS_ALIYUN_SECRET_KEY=your-secret-key
export OSS_ALIYUN_BUCKET=test-bucket

Run Tests

go test ./...

📄 License

This project is licensed under the Apache 2.0 License.

NOTICE

Some parts of the code in this project originate from dify-plugin-daemon

Provider Author PR
Aliyun OSS bravomark https://github.com/langgenius/dify-plugin-daemon/pull/261
Azure Blob techan https://github.com/langgenius/dify-plugin-daemon/pull/172
Google GCS Hironori Yamamoto https://github.com/langgenius/dify-plugin-daemon/pull/237
Local lengyhua https://github.com/langgenius/dify-plugin-daemon/pull/157
AWS S3 Yeuoly https://github.com/langgenius/dify-plugin-daemon/commit/9ad9d7d4de1d123956ab07955e541bc4053e5170
Tencent COS quicksand https://github.com/langgenius/dify-plugin-daemon/pull/97
Volcengine TOS quicksand https://github.com/langgenius/dify-cloud-kit/pull/2
S
Description
A library and tools for open cloud development in Go.
Readme Apache-2.0 168 KiB
Latest
2026-02-01 07:41:37 -05:00
Languages
Go 100%