fs

package module
v0.2.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: May 21, 2025 License: MIT Imports: 4 Imported by: 0

README

Go FileSystem

Go Reference Go Report Card License

Go FileSystem 是一个统一的文件系统接口实现,支持本地文件系统和多种云存储服务。它提供了一致的 API 来操作不同的存储系统,使得在不同存储系统之间切换变得简单。

Features

  • 统一的文件系统接口
  • 支持多种存储驱动
    • 本地文件系统
    • MinIO 对象存储
    • 阿里云 OSS
    • 华为云 OBS
    • 腾讯云 COS
    • AWS S3
  • 完整的文件操作支持
    • 文件的读写、复制、移动、删除
    • 目录的创建、删除、遍历
    • 文件元数据的读写
    • MIME 类型检测

Installation

go get github.com/dysodeng/fs

Usage

本地文件系统
package main

import (
    "context"
    "github.com/dysodeng/fs/driver/local"
)

func main() {
    fs := local.New("./storage")
    
    // 写入文件
    writer, err := fs.Create(context.Background(), "test.txt")
    if err != nil {
        panic(err)
    }
    writer.Write([]byte("Hello, World!"))
    writer.Close()
}
MinIO 对象存储
package main

import (
    "context"
    "github.com/dysodeng/fs/driver/minio"
)

func main() {
    config := minio.Config{
        Endpoint:        "play.min.io",
        AccessKeyID:     "your-access-key",
        SecretAccessKey: "your-secret-key",
        UseSSL:          true,
        BucketName:      "your-bucket",
        Location:        "us-east-1",
    }
	
    fs, err := minio.New(config)
    if err != nil {
        panic(err)
    }
    
    // 写入文件
    writer, err := fs.Create(context.Background(), "test.txt")
    if err != nil {
        panic(err)
    }
    writer.Write([]byte("Hello, MinIO!"))
    writer.Close()
}
阿里云 OSS
package main

import (
    "context"
    "github.com/dysodeng/fs/driver/alioss"
)

func main() {
    config := alioss.Config{
        Endpoint:        "oss-cn-hangzhou.aliyuncs.com",
        AccessKeyID:     "your-access-key",
        SecretAccessKey: "your-secret-key",
        BucketName:      "your-bucket",
    }
	
    fs, err := alioss.New(config)
    if err != nil {
        panic(err)
    }
    
    // 写入文件
    writer, err := fs.Create(context.Background(), "test.txt")
    if err != nil {
        panic(err)
    }
    writer.Write([]byte("Hello, OSS!"))
    writer.Close()
}
华为云 OBS
package main

import (
    "context"
    "github.com/dysodeng/fs/driver/hwobs"
)

func main() {
    config := hwobs.Config{
        Endpoint:        "obs.cn-north-4.myhuaweicloud.com",
        AccessKeyID:     "your-access-key",
        SecretAccessKey: "your-secret-key",
        BucketName:      "your-bucket",
    }
	
    fs, err := hwobs.New(config)
    if err != nil {
        panic(err)
    }
    
    // 写入文件
    writer, err := fs.Create(context.Background(), "test.txt")
    if err != nil {
        panic(err)
    }
    writer.Write([]byte("Hello, OBS!"))
    writer.Close()
}
腾讯云 COS
package main

import (
    "context"
    "github.com/dysodeng/fs/driver/txcos"
)

func main() {
    config := txcos.Config{
        BucketURL:      "https://example-1234567890.cos.ap-guangzhou.myqcloud.com",
        SecretID:       "your-secret-id",
        SecretKey:      "your-secret-key",
    }
	
    fs, err := txcos.New(config)
    if err != nil {
        panic(err)
    }
    
    // 写入文件
    writer, err := fs.Create(context.Background(), "test.txt")
    if err != nil {
        panic(err)
    }
    writer.Write([]byte("Hello, COS!"))
    writer.Close()
}
AWS S3
package main

import (
    "context"
    "github.com/dysodeng/fs/driver/s3"
)

func main() {
    config := s3.Config{
        Region:          "us-east-1",
        Endpoint:        "https://s3.amazonaws.com", // S3 服务地址(可选,用于兼容其他 S3 协议的存储服务)
        AccessKeyID:     "your-access-key",
        SecretAccessKey: "your-secret-key",
        BucketName:      "your-bucket",
        UsePathStyle:    false,                      // 是否使用路径样式访问
    }
    
    fs, err := s3.New(config)
    if err != nil {
        panic(err)
    }
    
    // 写入文件
    writer, err := fs.Create(context.Background(), "test.txt")
    if err != nil {
        panic(err)
    }
    writer.Write([]byte("Hello, S3!"))
    writer.Close()
}

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type CreateOptions

type CreateOptions struct {
	// ContentType 文件内容类型
	ContentType string
	// Metadata 文件元数据
	Metadata Metadata
}

CreateOptions 文件创建选项

type FileInfo

type FileInfo interface {
	Name() string
	Size() int64
	Mode() os.FileMode
	ModTime() time.Time
	IsDir() bool
	Sys() interface{}
}

FileInfo 文件信息,实现 os.FileInfo 接口

type FileSystem

type FileSystem interface {
	// List 列出目录内容
	List(ctx context.Context, path string) ([]FileInfo, error)
	// MakeDir 创建目录
	MakeDir(ctx context.Context, path string, perm os.FileMode) error
	// RemoveDir 删除目录
	RemoveDir(ctx context.Context, path string) error

	// Create 创建文件并返回io.WriteCloser
	Create(ctx context.Context, path string) (io.WriteCloser, error)
	// CreateWithMetadata 创建文件并返回io.WriteCloser
	CreateWithMetadata(ctx context.Context, path string, metadata Metadata) (io.WriteCloser, error)
	// CreateWithOptions 创建文件并设置选项
	CreateWithOptions(ctx context.Context, path string, options CreateOptions) (io.WriteCloser, error)
	// Open 打开文件并返回io.ReadCloser
	Open(ctx context.Context, path string) (io.ReadCloser, error)
	// OpenFile 以指定模式打开文件
	OpenFile(ctx context.Context, path string, flag int, perm os.FileMode) (io.ReadWriteCloser, error)
	// Remove 删除文件
	Remove(ctx context.Context, path string) error
	// Copy 复制文件
	Copy(ctx context.Context, src, dst string) error
	// Move 移动文件
	Move(ctx context.Context, src, dst string) error
	// Rename 重命名文件或目录
	Rename(ctx context.Context, oldPath, newPath string) error

	// Stat 获取文件/目录信息
	Stat(ctx context.Context, path string) (FileInfo, error)
	// GetMimeType 获取文件的 MIME 类型
	GetMimeType(ctx context.Context, path string) (string, error)
	// SetMetadata 设置元数据
	SetMetadata(ctx context.Context, path string, metadata map[string]interface{}) error
	// GetMetadata 获取元数据
	GetMetadata(ctx context.Context, path string) (map[string]interface{}, error)

	// Exists 判断文件或目录是否存在
	Exists(ctx context.Context, path string) (bool, error)
	// IsDir 判断是否为目录
	IsDir(ctx context.Context, path string) (bool, error)
	// IsFile 判断是否为文件
	IsFile(ctx context.Context, path string) (bool, error)

	// InitMultipartUpload 初始化分片上传
	InitMultipartUpload(ctx context.Context, path string) (string, error)
	// UploadPart 上传分片
	UploadPart(ctx context.Context, path string, uploadID string, partNumber int, data io.Reader) (string, error)
	// CompleteMultipartUpload 完成分片上传
	CompleteMultipartUpload(ctx context.Context, path string, uploadID string, parts []MultipartPart) error
	// AbortMultipartUpload 取消分片上传
	AbortMultipartUpload(ctx context.Context, path string, uploadID string) error
}

FileSystem 文件系统接口

type Metadata

type Metadata map[string]interface{}

Metadata 文件元数据

type MultipartPart added in v0.2.0

type MultipartPart struct {
	PartNumber int    // 分片号
	ETag       string // 分片ETag
}

MultipartPart 分片信息

Directories

Path Synopsis
driver
s3
cmd command

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL