object

package
v1.0.5 Latest Latest
Warning

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

Go to latest
Published: Sep 7, 2023 License: Apache-2.0 Imports: 114 Imported by: 15

README

The following object store are supported:

  • file: local files
  • sftp: FTP via SSH
  • s3: Amazon S3
  • hdfs: Hadoop File System (HDFS)
  • gcs: Google Cloud Storage
  • wasb: Windows Azure Blob Storage
  • oss: Aliyun OSS
  • cos: Tencent Cloud COS
  • ks3: KSYun KS3
  • ufile: UCloud UFile
  • qingstor: Qingcloud QingStor
  • bos: Baidu Cloud Object Storage
  • jss: JCloud Object Storage
  • qiniu: Qiniu
  • b2: Backblaze B2
  • space: Digital Ocean Space
  • obs: Huawei Object Storage Service
  • oos: CTYun OOS
  • scw: Scaleway Object Storage
  • minio: MinIO
  • scs: Sina Cloud Storage
  • eos: ECloud (China Mobile Cloud) Object Storage

they should be specified in the following format:

[NAME://][ACCESS_KEY:SECRET_KEY@]BUCKET[.ENDPOINT][/PREFIX]

Some examples:

  • local/path
  • user@host:port:path
  • file:///Users/me/code/
  • hdfs://hdfs@namenode1:9000,namenode2:9000/user/
  • s3://my-bucket/
  • s3://access-key:secret-key-id@my-bucket/prefix
  • wasb://account-name:account-key@my-container/prefix
  • gcs://my-bucket.us-west1.googleapi.com/
  • oss://test
  • cos://test-1234
  • obs://my-bucket
  • bos://my-bucket
  • minio://myip:9000/bucket
  • scs://access-key:secret-key-id@my-bucket.sinacloud.net/prefix

Note:

  • It's recommended to run it in the target region to have better performance.
  • Auto discover endpoint for bucket of S3, OSS, COS, OBS, BOS, SRC and DST can use format NAME://[ACCESS_KEY:SECRET_KEY@]BUCKET[/PREFIX] . ACCESS_KEY and SECRET_KEY can be provided by corresponding environment variables (see below).
  • S3:
    • The access key and secret key for S3 could be provided by AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY, or IAM role.
  • Wasb(Windows Azure Storage Blob)
    • The account name and account key can be provided as connection string by AZURE_STORAGE_CONNECTION_STRING.
  • GCS: The machine should be authorized to access Google Cloud Storage.
  • OSS:
    • The credential can be provided by environment variable ALICLOUD_ACCESS_KEY_ID and ALICLOUD_ACCESS_KEY_SECRET , RAM role, EMR MetaService.
  • COS:
    • The AppID should be part of the bucket name.
    • The credential can be provided by environment variable COS_SECRETID and COS_SECRETKEY.
  • OBS:
    • The credential can be provided by environment variable HWCLOUD_ACCESS_KEY and HWCLOUD_SECRET_KEY .
  • BOS:
    • The credential can be provided by environment variable BDCLOUD_ACCESS_KEY and BDCLOUD_SECRET_KEY .
  • Qiniu: The S3 endpoint should be used for Qiniu, for example, abc.cn-north-1-s3.qiniu.com. If there are keys starting with "/", the domain should be provided as QINIU_DOMAIN.
  • sftp: if your target machine uses SSH certificates instead of password, you should pass the path to your private key file to the environment variable SSH_PRIVATE_KEY_PATH, like SSH_PRIVATE_KEY_PATH=/home/someuser/.ssh/id_rsa juicefs sync [src] [dst].
  • Scaleway:
    • The credential can be provided by environment variable SCW_ACCESS_KEY and SCW_SECRET_KEY .
  • MinIO:
    • The credential can be provided by environment variable MINIO_ACCESS_KEY and MINIO_SECRET_KEY .

Documentation

Index

Constants

This section is empty.

Variables

View Source
var HEADER_NAMES = []string{"Content-MD5", "Content-Type", "Date"}
View Source
var OVHCompileRegexp = `^s3\.(\w*)(\.\w*)?\.cloud\.ovh\.net$`
View Source
var TryCFR bool // try copy_file_range
View Source
var UserAgent = "JuiceFS"

Functions

func ExportRsaPrivateKeyToPem

func ExportRsaPrivateKeyToPem(key *rsa.PrivateKey, passphrase string) string

func GetHttpClient

func GetHttpClient() *http.Client

func IsErrReplicating

func IsErrReplicating(err error) bool

func ListAll

func ListAll(store ObjectStorage, prefix, marker string) (<-chan Object, error)

ListAll on all the keys that starts at marker from object storage.

func MarshalObject

func MarshalObject(o Object) map[string]interface{}

func ParseRsaPrivateKeyFromPath

func ParseRsaPrivateKeyFromPath(path, passphrase string) (*rsa.PrivateKey, error)

func ParseRsaPrivateKeyFromPem

func ParseRsaPrivateKeyFromPem(enc []byte, passphrase []byte) (*rsa.PrivateKey, error)

func Register

func Register(name string, register Creator)

func Walk added in v0.10.0

func Walk(root string, walkFn WalkFunc) error

Walk walks the file tree rooted at root, calling walkFn for each file or directory in the tree, including root. All errors that arise visiting files and directories are filtered by walkFn. The files are walked in lexical order, which makes the output deterministic but means that for very large directories Walk can be inefficient. Walk always follow symbolic links.

Types

type COS

type COS struct {
	// contains filtered or unexported fields
}

func (*COS) AbortUpload

func (c *COS) AbortUpload(key string, uploadID string)

func (*COS) CompleteUpload

func (c *COS) CompleteUpload(key string, uploadID string, parts []*Part) error

func (*COS) Copy

func (c *COS) Copy(dst, src string) error

func (*COS) Create

func (c *COS) Create() error

func (*COS) CreateMultipartUpload

func (c *COS) CreateMultipartUpload(key string) (*MultipartUpload, error)

func (*COS) Delete

func (c *COS) Delete(key string) error

func (*COS) Get

func (c *COS) Get(key string, off, limit int64) (io.ReadCloser, error)

func (*COS) Head

func (c *COS) Head(key string) (Object, error)

func (*COS) List

func (c *COS) List(prefix, marker string, limit int64) ([]Object, error)

func (*COS) ListAll

func (c *COS) ListAll(prefix, marker string) (<-chan Object, error)

func (*COS) ListUploads

func (c *COS) ListUploads(marker string) ([]*PendingPart, string, error)

func (*COS) Put

func (c *COS) Put(key string, in io.Reader) error

func (*COS) String

func (c *COS) String() string

func (*COS) UploadPart

func (c *COS) UploadPart(key string, uploadID string, num int, body []byte) (*Part, error)

type Contents added in v0.1.4

type Contents struct {
	Key          string
	Size         int64
	LastModified time.Time
}

type Creator

type Creator func(bucket, accessKey, secretKey, token string) (ObjectStorage, error)

type DataItem

type DataItem struct {
	FileName   string
	Size       int64
	ModifyTime int
}

type DefaultObjectStorage

type DefaultObjectStorage struct{}

func (DefaultObjectStorage) AbortUpload

func (s DefaultObjectStorage) AbortUpload(key string, uploadID string)

func (DefaultObjectStorage) CompleteUpload

func (s DefaultObjectStorage) CompleteUpload(key string, uploadID string, parts []*Part) error

func (DefaultObjectStorage) Create

func (s DefaultObjectStorage) Create() error

func (DefaultObjectStorage) CreateMultipartUpload

func (s DefaultObjectStorage) CreateMultipartUpload(key string) (*MultipartUpload, error)

func (DefaultObjectStorage) Head

func (s DefaultObjectStorage) Head(key string) (Object, error)

func (DefaultObjectStorage) List

func (s DefaultObjectStorage) List(prefix, marker string, limit int64) ([]Object, error)

func (DefaultObjectStorage) ListAll

func (s DefaultObjectStorage) ListAll(prefix, marker string) (<-chan Object, error)

func (DefaultObjectStorage) ListUploads

func (s DefaultObjectStorage) ListUploads(marker string) ([]*PendingPart, string, error)

func (DefaultObjectStorage) UploadPart

func (s DefaultObjectStorage) UploadPart(key string, uploadID string, num int, body []byte) (*Part, error)

type Encryptor

type Encryptor interface {
	Encrypt(plaintext []byte) ([]byte, error)
	Decrypt(ciphertext []byte) ([]byte, error)
}

func NewAESEncryptor added in v0.11.0

func NewAESEncryptor(keyEncryptor Encryptor) Encryptor

func NewRSAEncryptor

func NewRSAEncryptor(privKey *rsa.PrivateKey) Encryptor

type File

type File interface {
	Object
	Owner() string
	Group() string
	Mode() os.FileMode
}

type FileSystem

type FileSystem interface {
	MtimeChanger
	Chmod(path string, mode os.FileMode) error
	Chown(path string, owner, group string) error
}

type ListBucketResult added in v0.1.4

type ListBucketResult struct {
	Contents       []*Contents
	IsTruncated    bool
	Prefix         string
	Marker         string
	MaxKeys        string
	NextMarker     string
	CommonPrefixes string
}

ListObjectsOutput presents output for ListObjects.

type MtimeChanger

type MtimeChanger interface {
	Chtimes(path string, mtime time.Time) error
}

type MultipartUpload

type MultipartUpload struct {
	MinPartSize int
	MaxCount    int
	UploadID    string
}

type Object

type Object interface {
	Key() string
	Size() int64
	Mtime() time.Time
	IsDir() bool
	IsSymlink() bool
}

func UnmarshalObject

func UnmarshalObject(m map[string]interface{}) Object

type ObjectStorage

type ObjectStorage interface {
	// Description of the object storage.
	String() string
	// Create the bucket if not existed.
	Create() error
	// Get the data for the given object specified by key.
	Get(key string, off, limit int64) (io.ReadCloser, error)
	// Put data read from a reader to an object specified by key.
	Put(key string, in io.Reader) error
	// Delete a object.
	Delete(key string) error

	// Head returns some information about the object or an error if not found.
	Head(key string) (Object, error)
	// List returns a list of objects.
	List(prefix, marker string, limit int64) ([]Object, error)
	// ListAll returns all the objects as an channel.
	ListAll(prefix, marker string) (<-chan Object, error)

	// CreateMultipartUpload starts to upload a large object part by part.
	CreateMultipartUpload(key string) (*MultipartUpload, error)
	// UploadPart upload a part of an object.
	UploadPart(key string, uploadID string, num int, body []byte) (*Part, error)
	// AbortUpload abort a multipart upload.
	AbortUpload(key string, uploadID string)
	// CompleteUpload finish an multipart upload.
	CompleteUpload(key string, uploadID string, parts []*Part) error
	// ListUploads lists existing multipart uploads.
	ListUploads(marker string) ([]*PendingPart, string, error)
}

ObjectStorage is the interface for object storage. all of these API should be idempotent.

func CreateStorage

func CreateStorage(name, endpoint, accessKey, secretKey, token string) (ObjectStorage, error)

func NewEncrypted

func NewEncrypted(o ObjectStorage, enc Encryptor) ObjectStorage

NewEncrypted returns a encrypted object storage

func NewSharded

func NewSharded(name, endpoint, ak, sk, token string, shards int) (ObjectStorage, error)

func WithPrefix

func WithPrefix(os ObjectStorage, prefix string) ObjectStorage

WithPrefix retuns a object storage that add a prefix to keys.

type Part

type Part struct {
	Num  int
	Size int
	ETag string
}

type PendingPart

type PendingPart struct {
	Key      string
	UploadID string
	Created  time.Time
}

type RestfulStorage

type RestfulStorage struct {
	DefaultObjectStorage
	// contains filtered or unexported fields
}

func (*RestfulStorage) Copy

func (s *RestfulStorage) Copy(dst, src string) error

func (*RestfulStorage) Delete

func (s *RestfulStorage) Delete(key string) error

func (*RestfulStorage) Get

func (s *RestfulStorage) Get(key string, off, limit int64) (io.ReadCloser, error)

func (*RestfulStorage) Head

func (s *RestfulStorage) Head(key string) (Object, error)

func (*RestfulStorage) List

func (s *RestfulStorage) List(prefix, marker string, limit int64) ([]Object, error)

func (*RestfulStorage) Put

func (u *RestfulStorage) Put(key string, body io.Reader) error

func (*RestfulStorage) String

func (s *RestfulStorage) String() string

type SectionReaderCloser

type SectionReaderCloser struct {
	*io.SectionReader
	io.Closer
}
type SupportSymlink interface {
	// Symlink create a symbolic link
	Symlink(oldName, newName string) error
	// Readlink read a symbolic link
	Readlink(name string) (string, error)
}

type WalkFunc added in v1.0.0

type WalkFunc func(path string, info fs.FileInfo, isSymlink bool, err error) error

type WebDAVWalkFunc added in v1.0.0

type WebDAVWalkFunc func(path string, info fs.FileInfo, err error) error

Jump to

Keyboard shortcuts

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