mirror of
https://github.com/langgenius/dify-cloud-kit.git
synced 2026-07-01 20:04:03 -04:00
bdc2eef3cdbf1241fa62dc4386b251374f4b539e
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>
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
Description
Releases
3
Languages
Go
100%