Documentation
¶
Overview ¶
@Description: 阿里云OSS存储提供者实现
@Author: 安知鱼
@Date: 2025-09-28 18:00:00
@LastEditTime: 2025-12-02 18:22:36
@LastEditors: 安知鱼 *
【重要:路径转换规则说明】 *
本存储提供者中的方法接收两种类型的路径参数,必须正确区分: *
┌─────────────────────────────────────────────────────────────────────────────┐
│ 类型1: virtualPath(完整虚拟路径) │
│ │
│ 格式: /挂载点/子目录/文件名 │
│ 示例: /oss/aaa/123.jpg │
│ │
│ 使用此参数的方法: │
│ - Upload() │
│ - List() │
│ - CreateDirectory() │
│ - DeleteDirectory() │
│ - Rename() │
│ - CreatePresignedUploadURL() │
│ │
│ 转换逻辑: 调用 buildObjectKey() 进行转换 │
│ 1. 从 virtualPath 中减去 policy.VirtualPath(挂载点)得到相对路径 │
│ 相对路径 = "/oss/aaa/123.jpg" - "/oss" = "/aaa/123.jpg" │
│ 2. 将相对路径与 policy.BasePath(云存储基础路径)拼接 │
│ 对象键 = "test" + "/aaa/123.jpg" = "test/aaa/123.jpg" │
└─────────────────────────────────────────────────────────────────────────────┘ *
┌─────────────────────────────────────────────────────────────────────────────┐
│ 类型2: source(完整对象键) │
│ │
│ 格式: 云存储上的实际路径(已包含 BasePath) │
│ 示例: test/aaa/123.jpg │
│ │
│ 使用此参数的方法: │
│ - Get() │
│ - Delete() │
│ - DeleteSingle() │
│ - Stream() │
│ - GetDownloadURL() │
│ - IsExist() / Exists() │
│ - GetThumbnail() │
│ │
│ 处理逻辑: 直接使用,不需要任何转换 │
│ source 是从数据库 file_storage_entities.source 字段读取的值, │
│ 在文件上传时已经由 Upload() 方法生成并存储。 │
└─────────────────────────────────────────────────────────────────────────────┘ *
【存储策略配置说明】 *
policy.VirtualPath: 策略在虚拟文件系统中的挂载点(如 "/oss")
policy.BasePath: 策略在云存储上的基础目录(如 "/test") *
【数据库存储说明】 *
files 表:
- name 字段存储相对于挂载点的路径(不含挂载点本身)
- 例如: 文件 "/oss/aaa/123.jpg" 的 name 字段值为 "123.jpg"(文件名) *
file_storage_entities 表:
- source 字段存储云存储上的完整对象键
- 例如: "test/aaa/123.jpg" *
【警告】修改路径转换逻辑前请仔细阅读以上说明!
@Description: AWS S3存储提供者实现(使用aws-sdk-go-v2)
@Author: 安知鱼
@Date: 2025-09-28 19:00:00
@LastEditTime: 2025-12-02 18:30:00
@LastEditors: 安知鱼 *
【重要:路径转换规则说明】 *
本存储提供者中的方法接收两种类型的路径参数,必须正确区分: *
┌─────────────────────────────────────────────────────────────────────────────┐
│ 类型1: virtualPath(完整虚拟路径) │
│ │
│ 格式: /挂载点/子目录/文件名 │
│ 示例: /s3/aaa/123.jpg │
│ │
│ 使用此参数的方法: │
│ - Upload() │
│ - List() │
│ - CreateDirectory() │
│ - DeleteDirectory() │
│ - Rename() │
│ - CreatePresignedUploadURL() │
│ │
│ 转换逻辑: 调用 buildObjectKey() 进行转换 │
│ 1. 从 virtualPath 中减去 policy.VirtualPath(挂载点)得到相对路径 │
│ 相对路径 = "/s3/aaa/123.jpg" - "/s3" = "/aaa/123.jpg" │
│ 2. 将相对路径与 policy.BasePath(云存储基础路径)拼接 │
│ 对象键 = "test" + "/aaa/123.jpg" = "test/aaa/123.jpg" │
└─────────────────────────────────────────────────────────────────────────────┘ *
┌─────────────────────────────────────────────────────────────────────────────┐
│ 类型2: source(完整对象键) │
│ │
│ 格式: 云存储上的实际路径(已包含 BasePath) │
│ 示例: test/aaa/123.jpg │
│ │
│ 使用此参数的方法: │
│ - Get() │
│ - Delete() │
│ - DeleteSingle() │
│ - Stream() │
│ - GetDownloadURL() │
│ - IsExist() / Exists() │
│ - GetThumbnail() │
│ │
│ 处理逻辑: 直接使用,不需要任何转换 │
│ source 是从数据库 file_storage_entities.source 字段读取的值, │
│ 在文件上传时已经由 Upload() 方法生成并存储。 │
└─────────────────────────────────────────────────────────────────────────────┘ *
【存储策略配置说明】 *
policy.VirtualPath: 策略在虚拟文件系统中的挂载点(如 "/s3")
policy.BasePath: 策略在云存储上的基础目录(如 "/test") *
【警告】修改路径转换逻辑前请仔细阅读以上说明!
internal/infra/storage/local.go
@Description: OneDrive 存储驱动的具体实现
@Author: 安知鱼
@Date: 2025-07-15 17:50:00
@LastEditTime: 2025-12-01 12:57:00
@LastEditors: 安知鱼
@Description: 定义了所有存储驱动需要遵守的接口和公共结构
@Author: 安知鱼
@Date: 2025-06-28 00:21:55
@LastEditTime: 2025-07-23 11:26:38
@LastEditors: 安知鱼
@Description: 七牛云Kodo存储提供者实现
@Author: 安知鱼
@Date: 2025-01-05 00:00:00
@LastEditTime: 2025-01-05 00:00:00
@LastEditors: 安知鱼 *
【重要:路径转换规则说明】 *
本存储提供者中的方法接收两种类型的路径参数,必须正确区分: *
┌─────────────────────────────────────────────────────────────────────────────┐
│ 类型1: virtualPath(完整虚拟路径) │
│ │
│ 格式: /挂载点/子目录/文件名 │
│ 示例: /qiniu/aaa/123.jpg │
│ │
│ 使用此参数的方法: │
│ - Upload() │
│ - List() │
│ - CreateDirectory() │
│ - DeleteDirectory() │
│ - Rename() │
│ - CreatePresignedUploadURL() │
│ │
│ 转换逻辑: 调用 buildObjectKey() 进行转换 │
│ 1. 从 virtualPath 中减去 policy.VirtualPath(挂载点)得到相对路径 │
│ 相对路径 = "/qiniu/aaa/123.jpg" - "/qiniu" = "/aaa/123.jpg" │
│ 2. 将相对路径与 policy.BasePath(云存储基础路径)拼接 │
│ 对象键 = "test" + "/aaa/123.jpg" = "test/aaa/123.jpg" │
└─────────────────────────────────────────────────────────────────────────────┘ *
┌─────────────────────────────────────────────────────────────────────────────┐
│ 类型2: source(完整对象键) │
│ │
│ 格式: 云存储上的实际路径(已包含 BasePath) │
│ 示例: test/aaa/123.jpg │
│ │
│ 使用此参数的方法: │
│ - Get() │
│ - Delete() │
│ - Stream() │
│ - GetDownloadURL() │
│ - IsExist() │
│ - GetThumbnail() │
│ │
│ 处理逻辑: 直接使用,不需要任何转换 │
│ source 是从数据库 file_storage_entities.source 字段读取的值, │
│ 在文件上传时已经由 Upload() 方法生成并存储。 │
└─────────────────────────────────────────────────────────────────────────────┘ *
【存储策略配置说明】 *
policy.VirtualPath: 策略在虚拟文件系统中的挂载点(如 "/qiniu")
policy.BasePath: 策略在云存储上的基础目录(如 "/test")
policy.Server: 存储区域上传域名(如 "https://up-z2.qiniup.com")
settings.cdn_domain: CDN/访问域名(如 "https://cdn.example.com") *
【警告】修改路径转换逻辑前请仔细阅读以上说明!
@Description: 腾讯云COS存储提供者实现
@Author: 安知鱼
@Date: 2025-09-28 12:00:00
@LastEditTime: 2025-12-02 18:30:00
@LastEditors: 安知鱼 *
【重要:路径转换规则说明】 *
本存储提供者中的方法接收两种类型的路径参数,必须正确区分: *
┌─────────────────────────────────────────────────────────────────────────────┐
│ 类型1: virtualPath(完整虚拟路径) │
│ │
│ 格式: /挂载点/子目录/文件名 │
│ 示例: /cos/aaa/123.jpg │
│ │
│ 使用此参数的方法: │
│ - Upload() │
│ - List() │
│ - CreateDirectory() │
│ - DeleteDirectory() │
│ - Rename() │
│ - CreatePresignedUploadURL() │
│ │
│ 转换逻辑: 调用 buildObjectKey() 进行转换 │
│ 1. 从 virtualPath 中减去 policy.VirtualPath(挂载点)得到相对路径 │
│ 相对路径 = "/cos/aaa/123.jpg" - "/cos" = "/aaa/123.jpg" │
│ 2. 将相对路径与 policy.BasePath(云存储基础路径)拼接 │
│ 对象键 = "test" + "/aaa/123.jpg" = "test/aaa/123.jpg" │
└─────────────────────────────────────────────────────────────────────────────┘ *
┌─────────────────────────────────────────────────────────────────────────────┐
│ 类型2: source(完整对象键) │
│ │
│ 格式: 云存储上的实际路径(已包含 BasePath) │
│ 示例: test/aaa/123.jpg │
│ │
│ 使用此参数的方法: │
│ - Get() │
│ - Delete() │
│ - Stream() │
│ - GetDownloadURL() │
│ - IsExist() / IsExistWithPolicy() │
│ - GetThumbnail() │
│ │
│ 处理逻辑: 直接使用,不需要任何转换 │
│ source 是从数据库 file_storage_entities.source 字段读取的值, │
│ 在文件上传时已经由 Upload() 方法生成并存储。 │
└─────────────────────────────────────────────────────────────────────────────┘ *
【存储策略配置说明】 *
policy.VirtualPath: 策略在虚拟文件系统中的挂载点(如 "/cos")
policy.BasePath: 策略在云存储上的基础目录(如 "/test") *
【警告】修改路径转换逻辑前请仔细阅读以上说明!
Index ¶
- Variables
- type AWSS3Provider
- func (p *AWSS3Provider) CreateDirectory(ctx context.Context, policy *model.StoragePolicy, virtualPath string) error
- func (p *AWSS3Provider) CreatePresignedUploadURL(ctx context.Context, policy *model.StoragePolicy, virtualPath string) (*PresignedUploadResult, error)
- func (p *AWSS3Provider) Delete(ctx context.Context, policy *model.StoragePolicy, sources []string) error
- func (p *AWSS3Provider) DeleteDirectory(ctx context.Context, policy *model.StoragePolicy, virtualPath string) error
- func (p *AWSS3Provider) DeleteSingle(ctx context.Context, policy *model.StoragePolicy, source string) error
- func (p *AWSS3Provider) Exists(ctx context.Context, policy *model.StoragePolicy, source string) (bool, error)
- func (p *AWSS3Provider) Get(ctx context.Context, policy *model.StoragePolicy, source string) (io.ReadCloser, error)
- func (p *AWSS3Provider) GetDownloadURL(ctx context.Context, policy *model.StoragePolicy, source string, ...) (string, error)
- func (p *AWSS3Provider) GetThumbnail(ctx context.Context, policy *model.StoragePolicy, source string, size string) (*ThumbnailResult, error)
- func (p *AWSS3Provider) IsExist(ctx context.Context, policy *model.StoragePolicy, source string) (bool, error)
- func (p *AWSS3Provider) List(ctx context.Context, policy *model.StoragePolicy, virtualPath string) ([]FileInfo, error)
- func (p *AWSS3Provider) Rename(ctx context.Context, policy *model.StoragePolicy, ...) error
- func (p *AWSS3Provider) Stream(ctx context.Context, policy *model.StoragePolicy, source string, ...) error
- func (p *AWSS3Provider) Upload(ctx context.Context, file io.Reader, policy *model.StoragePolicy, ...) (*UploadResult, error)
- type AliOSSProvider
- func (p *AliOSSProvider) CreateDirectory(ctx context.Context, policy *model.StoragePolicy, virtualPath string) error
- func (p *AliOSSProvider) CreatePresignedUploadURL(ctx context.Context, policy *model.StoragePolicy, virtualPath string) (*PresignedUploadResult, error)
- func (p *AliOSSProvider) Delete(ctx context.Context, policy *model.StoragePolicy, sources []string) error
- func (p *AliOSSProvider) DeleteDirectory(ctx context.Context, policy *model.StoragePolicy, virtualPath string) error
- func (p *AliOSSProvider) DeleteSingle(ctx context.Context, policy *model.StoragePolicy, source string) error
- func (p *AliOSSProvider) Exists(ctx context.Context, policy *model.StoragePolicy, source string) (bool, error)
- func (p *AliOSSProvider) Get(ctx context.Context, policy *model.StoragePolicy, source string) (io.ReadCloser, error)
- func (p *AliOSSProvider) GetCORSConfig(ctx context.Context, policy *model.StoragePolicy) ([]oss.CORSRule, error)
- func (p *AliOSSProvider) GetDownloadURL(ctx context.Context, policy *model.StoragePolicy, source string, ...) (string, error)
- func (p *AliOSSProvider) GetThumbnail(ctx context.Context, policy *model.StoragePolicy, source string, size string) (*ThumbnailResult, error)
- func (p *AliOSSProvider) IsExist(ctx context.Context, policy *model.StoragePolicy, source string) (bool, error)
- func (p *AliOSSProvider) List(ctx context.Context, policy *model.StoragePolicy, virtualPath string) ([]FileInfo, error)
- func (p *AliOSSProvider) Rename(ctx context.Context, policy *model.StoragePolicy, ...) error
- func (p *AliOSSProvider) SetupCORS(ctx context.Context, policy *model.StoragePolicy) error
- func (p *AliOSSProvider) Stream(ctx context.Context, policy *model.StoragePolicy, source string, ...) error
- func (p *AliOSSProvider) Upload(ctx context.Context, file io.Reader, policy *model.StoragePolicy, ...) (*UploadResult, error)
- type DownloadURLOptions
- type FileInfo
- type IStorageProvider
- func NewAWSS3Provider() IStorageProvider
- func NewAliOSSProvider() IStorageProvider
- func NewLocalProvider(secret string) IStorageProvider
- func NewOneDriveProvider(policyRepo repository.StoragePolicyRepository) IStorageProvider
- func NewQiniuKodoProvider() IStorageProvider
- func NewTencentCOSProvider() IStorageProvider
- type LocalProvider
- func (p *LocalProvider) CreateDirectory(ctx context.Context, policy *model.StoragePolicy, virtualPath string) error
- func (p *LocalProvider) Delete(ctx context.Context, policy *model.StoragePolicy, sources []string) error
- func (p *LocalProvider) DeleteDirectory(ctx context.Context, policy *model.StoragePolicy, virtualPath string) error
- func (p *LocalProvider) Get(ctx context.Context, policy *model.StoragePolicy, source string) (io.ReadCloser, error)
- func (p *LocalProvider) GetDownloadURL(ctx context.Context, policy *model.StoragePolicy, source string, ...) (string, error)
- func (p *LocalProvider) GetThumbnail(ctx context.Context, policy *model.StoragePolicy, source string, size string) (*ThumbnailResult, error)
- func (p *LocalProvider) IsExist(ctx context.Context, policy *model.StoragePolicy, source string) (bool, error)
- func (p *LocalProvider) List(ctx context.Context, policy *model.StoragePolicy, virtualPath string) ([]FileInfo, error)
- func (p *LocalProvider) Rename(ctx context.Context, policy *model.StoragePolicy, ...) error
- func (p *LocalProvider) Stream(ctx context.Context, policy *model.StoragePolicy, source string, ...) error
- func (p *LocalProvider) Upload(ctx context.Context, file io.Reader, policy *model.StoragePolicy, ...) (*UploadResult, error)
- type OneDriveProvider
- func (p *OneDriveProvider) CreateDirectory(ctx context.Context, policy *model.StoragePolicy, virtualPath string) error
- func (p *OneDriveProvider) CreatePresignedUploadURL(ctx context.Context, policy *model.StoragePolicy, virtualPath string) (*PresignedUploadResult, error)
- func (p *OneDriveProvider) Delete(ctx context.Context, policy *model.StoragePolicy, sources []string) error
- func (p *OneDriveProvider) DeleteDirectory(ctx context.Context, policy *model.StoragePolicy, virtualPath string) error
- func (p *OneDriveProvider) Get(ctx context.Context, policy *model.StoragePolicy, source string) (io.ReadCloser, error)
- func (p *OneDriveProvider) GetDownloadURL(ctx context.Context, policy *model.StoragePolicy, source string, ...) (string, error)
- func (p *OneDriveProvider) GetThumbnail(ctx context.Context, policy *model.StoragePolicy, source string, size string) (*ThumbnailResult, error)
- func (p *OneDriveProvider) IsExist(ctx context.Context, policy *model.StoragePolicy, source string) (bool, error)
- func (p *OneDriveProvider) List(ctx context.Context, policy *model.StoragePolicy, virtualPath string) ([]FileInfo, error)
- func (p *OneDriveProvider) Rename(ctx context.Context, policy *model.StoragePolicy, ...) error
- func (p *OneDriveProvider) Stream(ctx context.Context, policy *model.StoragePolicy, source string, ...) error
- func (p *OneDriveProvider) Upload(ctx context.Context, file io.Reader, policy *model.StoragePolicy, ...) (*UploadResult, error)
- type PresignedUploadResult
- type QiniuKodoProvider
- func (p *QiniuKodoProvider) CreateDirectory(ctx context.Context, policy *model.StoragePolicy, virtualPath string) error
- func (p *QiniuKodoProvider) CreatePresignedUploadURL(ctx context.Context, policy *model.StoragePolicy, virtualPath string) (*PresignedUploadResult, error)
- func (p *QiniuKodoProvider) Delete(ctx context.Context, policy *model.StoragePolicy, sources []string) error
- func (p *QiniuKodoProvider) DeleteDirectory(ctx context.Context, policy *model.StoragePolicy, virtualPath string) error
- func (p *QiniuKodoProvider) Get(ctx context.Context, policy *model.StoragePolicy, source string) (io.ReadCloser, error)
- func (p *QiniuKodoProvider) GetDownloadURL(ctx context.Context, policy *model.StoragePolicy, source string, ...) (string, error)
- func (p *QiniuKodoProvider) GetThumbnail(ctx context.Context, policy *model.StoragePolicy, source string, size string) (*ThumbnailResult, error)
- func (p *QiniuKodoProvider) IsExist(ctx context.Context, policy *model.StoragePolicy, source string) (bool, error)
- func (p *QiniuKodoProvider) List(ctx context.Context, policy *model.StoragePolicy, virtualPath string) ([]FileInfo, error)
- func (p *QiniuKodoProvider) Rename(ctx context.Context, policy *model.StoragePolicy, ...) error
- func (p *QiniuKodoProvider) SetupCORS(ctx context.Context, policy *model.StoragePolicy) error
- func (p *QiniuKodoProvider) Stream(ctx context.Context, policy *model.StoragePolicy, source string, ...) error
- func (p *QiniuKodoProvider) Upload(ctx context.Context, file io.Reader, policy *model.StoragePolicy, ...) (*UploadResult, error)
- type TencentCOSProvider
- func (p *TencentCOSProvider) CreateDirectory(ctx context.Context, policy *model.StoragePolicy, virtualPath string) error
- func (p *TencentCOSProvider) CreatePresignedUploadURL(ctx context.Context, policy *model.StoragePolicy, virtualPath string) (*PresignedUploadResult, error)
- func (p *TencentCOSProvider) Delete(ctx context.Context, policy *model.StoragePolicy, sources []string) error
- func (p *TencentCOSProvider) DeleteDirectory(ctx context.Context, policy *model.StoragePolicy, virtualPath string) error
- func (p *TencentCOSProvider) DeleteWithPolicy(ctx context.Context, policy *model.StoragePolicy, sources []string) error
- func (p *TencentCOSProvider) Get(ctx context.Context, policy *model.StoragePolicy, source string) (io.ReadCloser, error)
- func (p *TencentCOSProvider) GetCORSConfig(ctx context.Context, policy *model.StoragePolicy) (*cos.BucketGetCORSResult, error)
- func (p *TencentCOSProvider) GetDownloadURL(ctx context.Context, policy *model.StoragePolicy, source string, ...) (string, error)
- func (p *TencentCOSProvider) GetThumbnail(ctx context.Context, policy *model.StoragePolicy, source string, size string) (*ThumbnailResult, error)
- func (p *TencentCOSProvider) IsExist(ctx context.Context, policy *model.StoragePolicy, source string) (bool, error)
- func (p *TencentCOSProvider) IsExistWithPolicy(ctx context.Context, policy *model.StoragePolicy, source string) (bool, error)
- func (p *TencentCOSProvider) List(ctx context.Context, policy *model.StoragePolicy, virtualPath string) ([]FileInfo, error)
- func (p *TencentCOSProvider) Rename(ctx context.Context, policy *model.StoragePolicy, ...) error
- func (p *TencentCOSProvider) SetupCORS(ctx context.Context, policy *model.StoragePolicy) error
- func (p *TencentCOSProvider) Stream(ctx context.Context, policy *model.StoragePolicy, source string, ...) error
- func (p *TencentCOSProvider) Upload(ctx context.Context, file io.Reader, policy *model.StoragePolicy, ...) (*UploadResult, error)
- type ThumbnailResult
- type UploadResult
Constants ¶
This section is empty.
Variables ¶
var ErrFeatureNotSupported = errors.New("feature not supported by this provider")
定义一个错误,用于表示某个功能不被当前 Provider 支持
Functions ¶
This section is empty.
Types ¶
type AWSS3Provider ¶ added in v1.2.0
type AWSS3Provider struct {
}
AWSS3Provider 实现了 IStorageProvider 接口,用于处理与AWS S3的所有交互。
func (*AWSS3Provider) CreateDirectory ¶ added in v1.2.0
func (p *AWSS3Provider) CreateDirectory(ctx context.Context, policy *model.StoragePolicy, virtualPath string) error
CreateDirectory 在AWS S3中创建目录(通过创建空对象模拟)
func (*AWSS3Provider) CreatePresignedUploadURL ¶ added in v1.6.3
func (p *AWSS3Provider) CreatePresignedUploadURL(ctx context.Context, policy *model.StoragePolicy, virtualPath string) (*PresignedUploadResult, error)
CreatePresignedUploadURL 为客户端直传创建一个预签名的上传URL 客户端可以使用此URL直接PUT文件到AWS S3,无需经过服务器中转
【路径转换规则】 virtualPath 是完整的虚拟路径,格式为: /挂载点/子目录/文件名 例如: virtualPath = "/s3/aaa/123.jpg"
转换步骤(与 Upload 方法相同):
- 从 virtualPath 中减去 policy.VirtualPath(挂载点),得到相对路径 相对路径 = "/s3/aaa/123.jpg" - "/s3" = "/aaa/123.jpg"
- 将相对路径与 policy.BasePath(云存储基础路径)拼接 对象键 = "/test" + "/aaa/123.jpg" = "test/aaa/123.jpg"
func (*AWSS3Provider) Delete ¶ added in v1.2.0
func (p *AWSS3Provider) Delete(ctx context.Context, policy *model.StoragePolicy, sources []string) error
Delete 从AWS S3删除多个文件 Delete 从AWS S3删除多个文件 sources 是完整的对象键列表(如 "article_image_cos/logo.png"),已包含 basePath,无需再拼接
func (*AWSS3Provider) DeleteDirectory ¶ added in v1.2.0
func (p *AWSS3Provider) DeleteDirectory(ctx context.Context, policy *model.StoragePolicy, virtualPath string) error
DeleteDirectory 删除AWS S3中的空目录
func (*AWSS3Provider) DeleteSingle ¶ added in v1.2.0
func (p *AWSS3Provider) DeleteSingle(ctx context.Context, policy *model.StoragePolicy, source string) error
DeleteSingle 从AWS S3删除单个文件(内部使用)
func (*AWSS3Provider) Exists ¶ added in v1.2.0
func (p *AWSS3Provider) Exists(ctx context.Context, policy *model.StoragePolicy, source string) (bool, error)
Exists 检查文件是否存在于AWS S3中(带policy参数的版本)
func (*AWSS3Provider) Get ¶ added in v1.2.0
func (p *AWSS3Provider) Get(ctx context.Context, policy *model.StoragePolicy, source string) (io.ReadCloser, error)
Get 从AWS S3获取文件流
func (*AWSS3Provider) GetDownloadURL ¶ added in v1.2.0
func (p *AWSS3Provider) GetDownloadURL(ctx context.Context, policy *model.StoragePolicy, source string, options DownloadURLOptions) (string, error)
GetDownloadURL 根据存储策略权限设置生成AWS S3下载URL source 是完整的对象键(如 "article_image_cos/logo.png"),已包含 basePath,无需再拼接
func (*AWSS3Provider) GetThumbnail ¶ added in v1.2.0
func (p *AWSS3Provider) GetThumbnail(ctx context.Context, policy *model.StoragePolicy, source string, size string) (*ThumbnailResult, error)
GetThumbnail 获取缩略图(AWS S3不直接支持)
func (*AWSS3Provider) IsExist ¶ added in v1.2.0
func (p *AWSS3Provider) IsExist(ctx context.Context, policy *model.StoragePolicy, source string) (bool, error)
IsExist 检查文件是否存在于AWS S3中 IsExist 检查文件是否存在于AWS S3中 source 是完整的对象键(如 "article_image_cos/logo.png"),已包含 basePath,无需再拼接
func (*AWSS3Provider) List ¶ added in v1.2.0
func (p *AWSS3Provider) List(ctx context.Context, policy *model.StoragePolicy, virtualPath string) ([]FileInfo, error)
List 列出AWS S3存储桶中的对象
func (*AWSS3Provider) Rename ¶ added in v1.2.0
func (p *AWSS3Provider) Rename(ctx context.Context, policy *model.StoragePolicy, oldVirtualPath, newVirtualPath string) error
Rename 重命名或移动AWS S3中的文件或目录 Rename 重命名或移动AWS S3中的文件或目录 oldVirtualPath 和 newVirtualPath 是相对于 policy.VirtualPath 的路径,需要通过 buildObjectKey 转换为完整对象键
func (*AWSS3Provider) Stream ¶ added in v1.2.0
func (p *AWSS3Provider) Stream(ctx context.Context, policy *model.StoragePolicy, source string, writer io.Writer) error
Stream 从AWS S3流式传输文件到writer
func (*AWSS3Provider) Upload ¶ added in v1.2.0
func (p *AWSS3Provider) Upload(ctx context.Context, file io.Reader, policy *model.StoragePolicy, virtualPath string) (*UploadResult, error)
Upload 上传文件到AWS S3
【路径转换规则】 virtualPath 是完整的虚拟路径,格式为: /挂载点/子目录/文件名 例如: virtualPath = "/s3/aaa/123.jpg"
转换步骤:
- 从 virtualPath 中减去 policy.VirtualPath(挂载点),得到相对路径 相对路径 = "/s3/aaa/123.jpg" - "/s3" = "/aaa/123.jpg"
- 将相对路径与 policy.BasePath(云存储基础路径)拼接 对象键 = "/test" + "/aaa/123.jpg" = "test/aaa/123.jpg"
数据库 files 表的 name 字段存储的是相对于挂载点的路径(不含挂载点)
type AliOSSProvider ¶ added in v1.2.0
type AliOSSProvider struct {
}
AliOSSProvider 实现了 IStorageProvider 接口,用于处理与阿里云OSS的所有交互。
func (*AliOSSProvider) CreateDirectory ¶ added in v1.2.0
func (p *AliOSSProvider) CreateDirectory(ctx context.Context, policy *model.StoragePolicy, virtualPath string) error
CreateDirectory 在阿里云OSS中创建目录(通过创建空对象模拟)
func (*AliOSSProvider) CreatePresignedUploadURL ¶ added in v1.6.3
func (p *AliOSSProvider) CreatePresignedUploadURL(ctx context.Context, policy *model.StoragePolicy, virtualPath string) (*PresignedUploadResult, error)
CreatePresignedUploadURL 为客户端直传创建一个预签名的上传URL 客户端可以使用此URL直接PUT文件到阿里云OSS,无需经过服务器中转
【路径转换规则】 virtualPath 是完整的虚拟路径,格式为: /挂载点/子目录/文件名 例如: virtualPath = "/oss/aaa/123.jpg"
转换步骤(与 Upload 方法相同):
- 从 virtualPath 中减去 policy.VirtualPath(挂载点),得到相对路径 相对路径 = "/oss/aaa/123.jpg" - "/oss" = "/aaa/123.jpg"
- 将相对路径与 policy.BasePath(云存储基础路径)拼接 对象键 = "/test" + "/aaa/123.jpg" = "test/aaa/123.jpg"
func (*AliOSSProvider) Delete ¶ added in v1.2.0
func (p *AliOSSProvider) Delete(ctx context.Context, policy *model.StoragePolicy, sources []string) error
Delete 从阿里云OSS删除多个文件 Delete 从阿里云OSS删除多个文件 sources 是完整的对象键列表(如 "article_image_cos/logo.png"),已包含 basePath,无需再拼接
func (*AliOSSProvider) DeleteDirectory ¶ added in v1.2.0
func (p *AliOSSProvider) DeleteDirectory(ctx context.Context, policy *model.StoragePolicy, virtualPath string) error
DeleteDirectory 删除阿里云OSS中的空目录
func (*AliOSSProvider) DeleteSingle ¶ added in v1.2.0
func (p *AliOSSProvider) DeleteSingle(ctx context.Context, policy *model.StoragePolicy, source string) error
DeleteSingle 从阿里云OSS删除单个文件(内部使用)
func (*AliOSSProvider) Exists ¶ added in v1.2.0
func (p *AliOSSProvider) Exists(ctx context.Context, policy *model.StoragePolicy, source string) (bool, error)
Exists 检查文件是否存在于阿里云OSS中(带policy参数的版本)
func (*AliOSSProvider) Get ¶ added in v1.2.0
func (p *AliOSSProvider) Get(ctx context.Context, policy *model.StoragePolicy, source string) (io.ReadCloser, error)
Get 从阿里云OSS获取文件流
func (*AliOSSProvider) GetCORSConfig ¶ added in v1.6.4
func (p *AliOSSProvider) GetCORSConfig(ctx context.Context, policy *model.StoragePolicy) ([]oss.CORSRule, error)
GetCORSConfig 获取阿里云OSS存储桶的跨域配置
func (*AliOSSProvider) GetDownloadURL ¶ added in v1.2.0
func (p *AliOSSProvider) GetDownloadURL(ctx context.Context, policy *model.StoragePolicy, source string, options DownloadURLOptions) (string, error)
GetDownloadURL 根据存储策略权限设置生成阿里云OSS下载URL source 是完整的对象键(如 "article_image_cos/logo.png"),已包含 basePath,无需再拼接
func (*AliOSSProvider) GetThumbnail ¶ added in v1.2.0
func (p *AliOSSProvider) GetThumbnail(ctx context.Context, policy *model.StoragePolicy, source string, size string) (*ThumbnailResult, error)
GetThumbnail 阿里云OSS的图片处理(IMG)服务支持实时图片处理,可以生成缩略图 如果用户在阿里云控制台开通了图片处理服务,此功能将自动可用
func (*AliOSSProvider) IsExist ¶ added in v1.2.0
func (p *AliOSSProvider) IsExist(ctx context.Context, policy *model.StoragePolicy, source string) (bool, error)
IsExist 检查文件是否存在于阿里云OSS中 IsExist 检查文件是否存在于阿里云OSS中 source 是完整的对象键(如 "article_image_cos/logo.png"),已包含 basePath,无需再拼接
func (*AliOSSProvider) List ¶ added in v1.2.0
func (p *AliOSSProvider) List(ctx context.Context, policy *model.StoragePolicy, virtualPath string) ([]FileInfo, error)
List 列出阿里云OSS存储桶中的对象
func (*AliOSSProvider) Rename ¶ added in v1.2.0
func (p *AliOSSProvider) Rename(ctx context.Context, policy *model.StoragePolicy, oldVirtualPath, newVirtualPath string) error
Rename 重命名或移动阿里云OSS中的文件或目录 Rename 重命名或移动阿里云OSS中的文件或目录 oldVirtualPath 和 newVirtualPath 是相对于 policy.VirtualPath 的路径,需要通过 buildObjectKey 转换为完整对象键
func (*AliOSSProvider) SetupCORS ¶ added in v1.6.4
func (p *AliOSSProvider) SetupCORS(ctx context.Context, policy *model.StoragePolicy) error
SetupCORS 为阿里云OSS存储桶配置跨域策略 配置允许所有来源访问,支持GET, POST, PUT, DELETE, HEAD方法
func (*AliOSSProvider) Stream ¶ added in v1.2.0
func (p *AliOSSProvider) Stream(ctx context.Context, policy *model.StoragePolicy, source string, writer io.Writer) error
Stream 从阿里云OSS流式传输文件到writer
func (*AliOSSProvider) Upload ¶ added in v1.2.0
func (p *AliOSSProvider) Upload(ctx context.Context, file io.Reader, policy *model.StoragePolicy, virtualPath string) (*UploadResult, error)
Upload 上传文件到阿里云OSS
【路径转换规则】 virtualPath 是完整的虚拟路径,格式为: /挂载点/子目录/文件名 例如: virtualPath = "/oss/aaa/123.jpg"
转换步骤:
- 从 virtualPath 中减去 policy.VirtualPath(挂载点),得到相对路径 相对路径 = "/oss/aaa/123.jpg" - "/oss" = "/aaa/123.jpg"
- 将相对路径与 policy.BasePath(云存储基础路径)拼接 对象键 = "/test" + "/aaa/123.jpg" = "test/aaa/123.jpg"
数据库 files 表的 name 字段存储的是相对于挂载点的路径(不含挂载点)
type DownloadURLOptions ¶
type DownloadURLOptions struct {
PublicID string // 文件的公共ID,用于本地存储签名
ExpiresIn int64 // 链接的有效时长(秒)
QueryParams string // 图片处理参数(如 imageMogr2/format/avif 或 x-oss-process=image/format,webp)
}
DownloadURLOptions 包含了生成下载链接时可能需要的额外参数
type IStorageProvider ¶
type IStorageProvider interface {
// Upload 将文件流上传到指定的存储策略。
Upload(ctx context.Context, file io.Reader, policy *model.StoragePolicy, virtualPath string) (*UploadResult, error)
// CreateDirectory 在存储中创建一个目录。
CreateDirectory(ctx context.Context, policy *model.StoragePolicy, virtualPath string) error
// Delete 删除一个或多个物理文件,需要处理空文件夹情况。
Delete(ctx context.Context, policy *model.StoragePolicy, sources []string) error
// GetDownloadURL 为存储中的文件生成一个临时的、可公开访问的下载链接。
GetDownloadURL(ctx context.Context, policy *model.StoragePolicy, source string, options DownloadURLOptions) (string, error)
// DeleteDirectory 删除一个空目录。
DeleteDirectory(ctx context.Context, policy *model.StoragePolicy, virtualPath string) error
// Rename 重命名或移动存储中的文件或目录。
Rename(ctx context.Context, policy *model.StoragePolicy, oldVirtualPath, newVirtualPath string) error
// Stream 将文件内容以流式传输到给定的写入器。
Stream(ctx context.Context, policy *model.StoragePolicy, source string, writer io.Writer) error
// IsExist 检查给定的源路径是否存在物理文件。
IsExist(ctx context.Context, policy *model.StoragePolicy, source string) (bool, error)
// Get 返回一个可读的文件流,用于服务内部的文件处理,如元数据提取。
Get(ctx context.Context, policy *model.StoragePolicy, source string) (io.ReadCloser, error)
// List 列出指定虚拟路径下的所有文件和目录。
List(ctx context.Context, policy *model.StoragePolicy, virtualPath string) ([]FileInfo, error)
// GetThumbnail 获取指定文件的缩略图。
GetThumbnail(ctx context.Context, policy *model.StoragePolicy, source string, size string) (*ThumbnailResult, error)
}
IStorageProvider 定义了所有存储提供者必须实现的接口。
func NewAWSS3Provider ¶ added in v1.2.0
func NewAWSS3Provider() IStorageProvider
NewAWSS3Provider 是 AWSS3Provider 的构造函数。
func NewAliOSSProvider ¶ added in v1.2.0
func NewAliOSSProvider() IStorageProvider
NewAliOSSProvider 是 AliOSSProvider 的构造函数。
func NewLocalProvider ¶
func NewLocalProvider(secret string) IStorageProvider
NewLocalProvider 是 LocalProvider 的构造函数,接收一个用于URL签名的密钥。
func NewOneDriveProvider ¶
func NewOneDriveProvider(policyRepo repository.StoragePolicyRepository) IStorageProvider
NewOneDriveProvider 是 OneDriveProvider 的构造函数。
func NewQiniuKodoProvider ¶ added in v1.6.11
func NewQiniuKodoProvider() IStorageProvider
NewQiniuKodoProvider 是 QiniuKodoProvider 的构造函数。
func NewTencentCOSProvider ¶ added in v1.2.0
func NewTencentCOSProvider() IStorageProvider
NewTencentCOSProvider 是 TencentCOSProvider 的构造函数。
type LocalProvider ¶
type LocalProvider struct {
// contains filtered or unexported fields
}
LocalProvider 实现了 IStorageProvider 接口,用于处理与本机磁盘文件系统的所有交互。
func (*LocalProvider) CreateDirectory ¶
func (p *LocalProvider) CreateDirectory(ctx context.Context, policy *model.StoragePolicy, virtualPath string) error
CreateDirectory 实现了在本机创建物理目录的逻辑。
func (*LocalProvider) Delete ¶
func (p *LocalProvider) Delete(ctx context.Context, policy *model.StoragePolicy, sources []string) error
Delete 实现了删除本机上一个或多个物理文件或目录的逻辑。
func (*LocalProvider) DeleteDirectory ¶
func (p *LocalProvider) DeleteDirectory(ctx context.Context, policy *model.StoragePolicy, virtualPath string) error
DeleteDirectory 实现了删除本机上一个空目录的逻辑。
func (*LocalProvider) Get ¶
func (p *LocalProvider) Get(ctx context.Context, policy *model.StoragePolicy, source string) (io.ReadCloser, error)
Get 实现了从本机磁盘获取文件读取器的逻辑。
func (*LocalProvider) GetDownloadURL ¶
func (p *LocalProvider) GetDownloadURL(ctx context.Context, policy *model.StoragePolicy, source string, options DownloadURLOptions) (string, error)
GetDownloadURL 为本地文件生成一个带签名的、有时间限制的临时下载链接。
func (*LocalProvider) GetThumbnail ¶
func (p *LocalProvider) GetThumbnail(ctx context.Context, policy *model.StoragePolicy, source string, size string) (*ThumbnailResult, error)
GetThumbnail 实现了 IStorageProvider 接口。 对于本地存储,它不提供原生缩略图功能,因此总是返回 ErrFeatureNotSupported。
func (*LocalProvider) IsExist ¶
func (p *LocalProvider) IsExist(ctx context.Context, policy *model.StoragePolicy, source string) (bool, error)
IsExist 检查本地文件系统中指定路径的文件或目录是否存在。
func (*LocalProvider) List ¶
func (p *LocalProvider) List(ctx context.Context, policy *model.StoragePolicy, virtualPath string) ([]FileInfo, error)
List 实现了为本地文件系统列出目录内容的功能。
func (*LocalProvider) Rename ¶
func (p *LocalProvider) Rename(ctx context.Context, policy *model.StoragePolicy, oldVirtualPath, newVirtualPath string) error
Rename 重命名本地文件系统上的文件或目录。
func (*LocalProvider) Stream ¶
func (p *LocalProvider) Stream(ctx context.Context, policy *model.StoragePolicy, source string, writer io.Writer) error
Stream 实现了从本机磁盘流式读取文件并将其内容写入给定的 io.Writer。
func (*LocalProvider) Upload ¶
func (p *LocalProvider) Upload(ctx context.Context, file io.Reader, policy *model.StoragePolicy, virtualPath string) (*UploadResult, error)
Upload 实现了将文件流保存到本机磁盘的逻辑。
type OneDriveProvider ¶
type OneDriveProvider struct {
// contains filtered or unexported fields
}
OneDriveProvider 实现了 IStorageProvider 接口,用于处理与 Microsoft OneDrive 的所有交互。
func (*OneDriveProvider) CreateDirectory ¶
func (p *OneDriveProvider) CreateDirectory(ctx context.Context, policy *model.StoragePolicy, virtualPath string) error
CreateDirectory 在存储中创建一个目录。 此实现是幂等的:如果目录已存在,不会返回错误。
func (*OneDriveProvider) CreatePresignedUploadURL ¶
func (p *OneDriveProvider) CreatePresignedUploadURL(ctx context.Context, policy *model.StoragePolicy, virtualPath string) (*PresignedUploadResult, error)
CreatePresignedUploadURL 为客户端直传创建一个临时的上传会话和URL。
func (*OneDriveProvider) Delete ¶
func (p *OneDriveProvider) Delete(ctx context.Context, policy *model.StoragePolicy, sources []string) error
Delete 从 OneDrive 删除一个或多个物理文件或目录。 注意:OneDrive的实现暂时忽略传入的policy参数,仍然使用原有的路径查找策略逻辑。
func (*OneDriveProvider) DeleteDirectory ¶
func (p *OneDriveProvider) DeleteDirectory(ctx context.Context, policy *model.StoragePolicy, virtualPath string) error
DeleteDirectory 删除一个空目录或非空目录。 在 OneDrive 中,删除文件和目录使用相同的 API。
func (*OneDriveProvider) Get ¶
func (p *OneDriveProvider) Get(ctx context.Context, policy *model.StoragePolicy, source string) (io.ReadCloser, error)
Get 返回一个可读的文件流,用于服务内部的文件处理,如元数据提取。
func (*OneDriveProvider) GetDownloadURL ¶
func (p *OneDriveProvider) GetDownloadURL(ctx context.Context, policy *model.StoragePolicy, source string, options DownloadURLOptions) (string, error)
GetDownloadURL 为存储在 OneDrive 中的文件生成一个临时的、可公开访问的下载链接。
func (*OneDriveProvider) GetThumbnail ¶
func (p *OneDriveProvider) GetThumbnail(ctx context.Context, policy *model.StoragePolicy, source string, size string) (*ThumbnailResult, error)
GetThumbnail 尝试从 OneDrive 直接获取文件的缩略图。
func (*OneDriveProvider) IsExist ¶
func (p *OneDriveProvider) IsExist(ctx context.Context, policy *model.StoragePolicy, source string) (bool, error)
IsExist 检查给定的源路径在 OneDrive 上是否存在物理文件或目录。
func (*OneDriveProvider) List ¶
func (p *OneDriveProvider) List(ctx context.Context, policy *model.StoragePolicy, virtualPath string) ([]FileInfo, error)
List 列出指定虚拟路径下的所有文件和目录。
func (*OneDriveProvider) Rename ¶
func (p *OneDriveProvider) Rename(ctx context.Context, policy *model.StoragePolicy, oldVirtualPath, newVirtualPath string) error
Rename 重命名或移动存储中的文件或目录。 它通过更新项目的元数据(名称和/或父目录ID)来实现。
func (*OneDriveProvider) Stream ¶
func (p *OneDriveProvider) Stream(ctx context.Context, policy *model.StoragePolicy, source string, writer io.Writer) error
Stream 将 OneDrive 中的文件内容以流式传输到给定的写入器,通常用于直接向客户端响应。
func (*OneDriveProvider) Upload ¶
func (p *OneDriveProvider) Upload(ctx context.Context, file io.Reader, policy *model.StoragePolicy, virtualPath string) (*UploadResult, error)
Upload 将文件流上传到指定的存储策略。 它会根据文件大小自动选择简单上传或可续传的分片上传,并能懒创建父目录。
type PresignedUploadResult ¶
type PresignedUploadResult struct {
UploadURL string `json:"uploadUrl"` // 预签名上传URL
ExpirationDateTime time.Time `json:"expirationDateTime"` // URL过期时间
ContentType string `json:"contentType"` // 期望的 Content-Type,客户端上传时必须使用此值
}
PresignedUploadResult 封装了客户端直传所需的预签名信息
type QiniuKodoProvider ¶ added in v1.6.11
type QiniuKodoProvider struct {
}
QiniuKodoProvider 实现了 IStorageProvider 接口,用于处理与七牛云Kodo的所有交互。
func (*QiniuKodoProvider) CreateDirectory ¶ added in v1.6.11
func (p *QiniuKodoProvider) CreateDirectory(ctx context.Context, policy *model.StoragePolicy, virtualPath string) error
CreateDirectory 在七牛云Kodo中创建目录(通过创建空对象模拟)
func (*QiniuKodoProvider) CreatePresignedUploadURL ¶ added in v1.6.11
func (p *QiniuKodoProvider) CreatePresignedUploadURL(ctx context.Context, policy *model.StoragePolicy, virtualPath string) (*PresignedUploadResult, error)
CreatePresignedUploadURL 为客户端直传创建上传凭证
func (*QiniuKodoProvider) Delete ¶ added in v1.6.11
func (p *QiniuKodoProvider) Delete(ctx context.Context, policy *model.StoragePolicy, sources []string) error
Delete 从七牛云Kodo删除多个文件
func (*QiniuKodoProvider) DeleteDirectory ¶ added in v1.6.11
func (p *QiniuKodoProvider) DeleteDirectory(ctx context.Context, policy *model.StoragePolicy, virtualPath string) error
DeleteDirectory 删除七牛云Kodo中的空目录
func (*QiniuKodoProvider) Get ¶ added in v1.6.11
func (p *QiniuKodoProvider) Get(ctx context.Context, policy *model.StoragePolicy, source string) (io.ReadCloser, error)
Get 从七牛云Kodo获取文件流
func (*QiniuKodoProvider) GetDownloadURL ¶ added in v1.6.11
func (p *QiniuKodoProvider) GetDownloadURL(ctx context.Context, policy *model.StoragePolicy, source string, options DownloadURLOptions) (string, error)
GetDownloadURL 生成七牛云Kodo下载URL
func (*QiniuKodoProvider) GetThumbnail ¶ added in v1.6.11
func (p *QiniuKodoProvider) GetThumbnail(ctx context.Context, policy *model.StoragePolicy, source string, size string) (*ThumbnailResult, error)
GetThumbnail 使用七牛云图片处理服务生成缩略图
func (*QiniuKodoProvider) IsExist ¶ added in v1.6.11
func (p *QiniuKodoProvider) IsExist(ctx context.Context, policy *model.StoragePolicy, source string) (bool, error)
IsExist 检查文件是否存在于七牛云Kodo中
func (*QiniuKodoProvider) List ¶ added in v1.6.11
func (p *QiniuKodoProvider) List(ctx context.Context, policy *model.StoragePolicy, virtualPath string) ([]FileInfo, error)
List 列出七牛云Kodo存储空间中的对象
func (*QiniuKodoProvider) Rename ¶ added in v1.6.11
func (p *QiniuKodoProvider) Rename(ctx context.Context, policy *model.StoragePolicy, oldVirtualPath, newVirtualPath string) error
Rename 重命名或移动七牛云Kodo中的文件或目录
func (*QiniuKodoProvider) SetupCORS ¶ added in v1.6.11
func (p *QiniuKodoProvider) SetupCORS(ctx context.Context, policy *model.StoragePolicy) error
SetupCORS 为七牛云存储桶配置跨域策略 注意:七牛云的CORS配置需要在控制台进行,此方法仅作占位
func (*QiniuKodoProvider) Stream ¶ added in v1.6.11
func (p *QiniuKodoProvider) Stream(ctx context.Context, policy *model.StoragePolicy, source string, writer io.Writer) error
Stream 将七牛云Kodo文件内容流式传输到写入器
func (*QiniuKodoProvider) Upload ¶ added in v1.6.11
func (p *QiniuKodoProvider) Upload(ctx context.Context, file io.Reader, policy *model.StoragePolicy, virtualPath string) (*UploadResult, error)
Upload 上传文件到七牛云Kodo
type TencentCOSProvider ¶ added in v1.2.0
type TencentCOSProvider struct {
}
TencentCOSProvider 实现了 IStorageProvider 接口,用于处理与腾讯云COS的所有交互。
func (*TencentCOSProvider) CreateDirectory ¶ added in v1.2.0
func (p *TencentCOSProvider) CreateDirectory(ctx context.Context, policy *model.StoragePolicy, virtualPath string) error
CreateDirectory 在腾讯云COS中创建"目录"
func (*TencentCOSProvider) CreatePresignedUploadURL ¶ added in v1.6.3
func (p *TencentCOSProvider) CreatePresignedUploadURL(ctx context.Context, policy *model.StoragePolicy, virtualPath string) (*PresignedUploadResult, error)
CreatePresignedUploadURL 为客户端直传创建一个预签名的上传URL 客户端可以使用此URL直接PUT文件到腾讯云COS,无需经过服务器中转
【路径转换规则】 virtualPath 是完整的虚拟路径,格式为: /挂载点/子目录/文件名 例如: virtualPath = "/cos/aaa/123.jpg"
转换步骤(与 Upload 方法相同):
- 从 virtualPath 中减去 policy.VirtualPath(挂载点),得到相对路径 相对路径 = "/cos/aaa/123.jpg" - "/cos" = "/aaa/123.jpg"
- 将相对路径与 policy.BasePath(云存储基础路径)拼接 对象键 = "/test" + "/aaa/123.jpg" = "test/aaa/123.jpg"
func (*TencentCOSProvider) Delete ¶ added in v1.2.0
func (p *TencentCOSProvider) Delete(ctx context.Context, policy *model.StoragePolicy, sources []string) error
Delete 删除腾讯云COS中的文件 sources 是完整的对象键列表(如 "article_image_cos/logo.png"),已包含 basePath,无需再拼接
func (*TencentCOSProvider) DeleteDirectory ¶ added in v1.2.0
func (p *TencentCOSProvider) DeleteDirectory(ctx context.Context, policy *model.StoragePolicy, virtualPath string) error
DeleteDirectory 删除腾讯云COS中的"目录"
func (*TencentCOSProvider) DeleteWithPolicy ¶ added in v1.2.0
func (p *TencentCOSProvider) DeleteWithPolicy(ctx context.Context, policy *model.StoragePolicy, sources []string) error
DeleteWithPolicy 使用策略信息删除文件(扩展方法)
func (*TencentCOSProvider) Get ¶ added in v1.2.0
func (p *TencentCOSProvider) Get(ctx context.Context, policy *model.StoragePolicy, source string) (io.ReadCloser, error)
Get 从腾讯云COS获取文件流
func (*TencentCOSProvider) GetCORSConfig ¶ added in v1.2.0
func (p *TencentCOSProvider) GetCORSConfig(ctx context.Context, policy *model.StoragePolicy) (*cos.BucketGetCORSResult, error)
GetCORSConfig 获取腾讯云COS存储桶的跨域配置
func (*TencentCOSProvider) GetDownloadURL ¶ added in v1.2.0
func (p *TencentCOSProvider) GetDownloadURL(ctx context.Context, policy *model.StoragePolicy, source string, options DownloadURLOptions) (string, error)
GetDownloadURL 根据存储策略权限设置生成腾讯云COS下载URL
func (*TencentCOSProvider) GetThumbnail ¶ added in v1.2.0
func (p *TencentCOSProvider) GetThumbnail(ctx context.Context, policy *model.StoragePolicy, source string, size string) (*ThumbnailResult, error)
GetThumbnail 腾讯云COS的数据万象服务支持实时图片处理,可以生成缩略图 如果用户在腾讯云控制台开通了数据万象服务,此功能将自动可用
func (*TencentCOSProvider) IsExist ¶ added in v1.2.0
func (p *TencentCOSProvider) IsExist(ctx context.Context, policy *model.StoragePolicy, source string) (bool, error)
IsExist 检查腾讯云COS中的对象是否存在
func (*TencentCOSProvider) IsExistWithPolicy ¶ added in v1.2.0
func (p *TencentCOSProvider) IsExistWithPolicy(ctx context.Context, policy *model.StoragePolicy, source string) (bool, error)
IsExistWithPolicy 使用策略信息检查对象是否存在(扩展方法)
func (*TencentCOSProvider) List ¶ added in v1.2.0
func (p *TencentCOSProvider) List(ctx context.Context, policy *model.StoragePolicy, virtualPath string) ([]FileInfo, error)
List 列出腾讯云COS存储桶中的对象
func (*TencentCOSProvider) Rename ¶ added in v1.2.0
func (p *TencentCOSProvider) Rename(ctx context.Context, policy *model.StoragePolicy, oldVirtualPath, newVirtualPath string) error
Rename 重命名或移动腾讯云COS中的对象 Rename 重命名或移动腾讯云COS中的文件或目录 oldVirtualPath 和 newVirtualPath 是相对于 policy.VirtualPath 的路径,需要通过 buildObjectKey 转换为完整对象键
func (*TencentCOSProvider) SetupCORS ¶ added in v1.2.0
func (p *TencentCOSProvider) SetupCORS(ctx context.Context, policy *model.StoragePolicy) error
SetupCORS 为腾讯云COS存储桶配置跨域策略 配置允许所有来源访问,支持GET, POST, PUT, DELETE, HEAD方法
func (*TencentCOSProvider) Stream ¶ added in v1.2.0
func (p *TencentCOSProvider) Stream(ctx context.Context, policy *model.StoragePolicy, source string, writer io.Writer) error
Stream 将腾讯云COS文件内容流式传输到写入器
func (*TencentCOSProvider) Upload ¶ added in v1.2.0
func (p *TencentCOSProvider) Upload(ctx context.Context, file io.Reader, policy *model.StoragePolicy, virtualPath string) (*UploadResult, error)
Upload 上传文件到腾讯云COS
【路径转换规则】 virtualPath 是完整的虚拟路径,格式为: /挂载点/子目录/文件名 例如: virtualPath = "/cos/aaa/123.jpg"
转换步骤:
- 从 virtualPath 中减去 policy.VirtualPath(挂载点),得到相对路径 相对路径 = "/cos/aaa/123.jpg" - "/cos" = "/aaa/123.jpg"
- 将相对路径与 policy.BasePath(云存储基础路径)拼接 对象键 = "/test" + "/aaa/123.jpg" = "test/aaa/123.jpg"
数据库 files 表的 name 字段存储的是相对于挂载点的路径(不含挂载点)
type ThumbnailResult ¶
ThumbnailResult 封装了获取缩略图的结果