Documentation ¶
Index ¶
- Constants
- Variables
- func FileServer(root FileSystem) http.Handler
- func ServeContent(w http.ResponseWriter, req *http.Request, name string, modtime time.Time, ...)
- func ServeFile(w http.ResponseWriter, r *http.Request, name string)
- func SetCacheDirectoryAndLoad(path string) error
- func SetLogger(logger kodocli.Ilog)
- func StartServer(cfg *Config) (*http.Server, error)
- func StartSimulateErrorServer(_ *Config)deprecated
- func WithCurrentConfigurable(f func(configurable Configurable))
- type ApiServer
- type Config
- type Configurable
- type CopyKeyInput
- type CopyKeysError
- type DeleteKeysError
- type Dir
- type Downloader
- func (d *Downloader) DownloadBytes(key string) (data []byte, err error)
- func (d *Downloader) DownloadCheck(key string) (l int64, err error)
- func (d *Downloader) DownloadCheckList(ctx context.Context, keys []string) ([]*FileStat, error)
- func (d *Downloader) DownloadFile(key, path string) (f *os.File, err error)
- func (d *Downloader) DownloadRangeBytes(key string, offset, size int64) (l int64, data []byte, err error)
- func (d *Downloader) DownloadRangeReader(key string, offset, size int64) (l int64, reader io.ReadCloser, err error)
- func (d *Downloader) DownloadRaw(key string, headers http.Header) (*http.Response, error)
- type File
- type FileStat
- type FileSystem
- type FromToKey
- type FromToKeyError
- type Lister
- func (l *Lister) Copy(fromKey, toKey string) error
- func (l *Lister) CopyDirectory(srcDir, destDir string) (copyErrors []CopyKeysError, err error)
- func (l *Lister) CopyKeys(input []CopyKeyInput) ([]*CopyKeysError, error)
- func (l *Lister) Delete(key string) error
- func (l *Lister) DeleteDirectory(dir string) (deleteErrors []DeleteKeysError, err error)
- func (l *Lister) DeleteKeys(keys []string) ([]*DeleteKeysError, error)
- func (l *Lister) ForceDelete(key string) error
- func (l *Lister) ForceDeleteDirectory(dir string) (deleteErrors []DeleteKeysError, err error)
- func (l *Lister) ForceDeleteKeys(keys []string) ([]*DeleteKeysError, error)
- func (l *Lister) ListPrefix(prefix string) []string
- func (l *Lister) ListStat(keys []string) []*FileStat
- func (l *Lister) MoveDirectoryTo(srcDir, destDir, toBucket string) (moveErrors []MoveKeysError, err error)
- func (l *Lister) MoveKeys(input []MoveKeyInput) ([]*MoveKeysError, error)
- func (l *Lister) MoveTo(fromKey, toBucket, toKey string) error
- func (l *Lister) Rename(fromKey, toKey string) error
- func (l *Lister) RenameDirectory(srcDir, destDir string) (renameErrors []RenameKeysError, err error)
- func (l *Lister) RenameKeys(input []RenameKeyInput) ([]*RenameKeysError, error)
- type MoveKeyInput
- type MoveKeysError
- type MultiClustersConfig
- type Queryer
- func (queryer *Queryer) QueryApiServerHosts(https bool) (urls []string)
- func (queryer *Queryer) QueryIoHosts(https bool) (urls []string)
- func (queryer *Queryer) QueryRsHosts(https bool) (urls []string)
- func (queryer *Queryer) QueryRsfHosts(https bool) (urls []string)
- func (queryer *Queryer) QueryUpHosts(https bool) (urls []string)
- type RenameKeyInput
- type RenameKeysError
- type Req
- type SingleClusterConfig
- type SingleKeyError
- type Uploader
Constants ¶
const ( QINIU_ENV = "QINIU" QINIU_MULTI_CLUSTER_ENV = "QINIU_MULTI_CLUSTER" )
const DefaultPathPrefix = ""
const FileError = -3
const HostError = -2
const PathError = -1
const QINIU_DISABLE_CONFIG_HOT_RELOADING_ENV = "QINIU_DISABLE_CONFIG_HOT_RELOADING"
Variables ¶
var ( MaxContinuousFailureTimes = 5 MaxContinuousFailureDuration = 1 * time.Minute MaxFindHostsPrecent = 50 )
var ( ErrUndefinedConfig = errors.New("undefined config") ErrCannotTransferBetweenDifferentClusters = errors.New("cannot transfer between different clusters") )
Functions ¶
func FileServer ¶
func FileServer(root FileSystem) http.Handler
FileServer returns a handler that serves HTTP http.Requests with the contents of the file system rooted at root.
To use the operating system's file system implementation, use http.Dir:
http.Handle("/", http.FileServer(http.Dir("/tmp")))
As a special case, the returned file server redirects any http.Request ending in "/index.html" to the same path, without the final "index.html".
func ServeContent ¶
func ServeContent(w http.ResponseWriter, req *http.Request, name string, modtime time.Time, content io.ReadSeeker)
ServeContent replies to the http.Request using the content in the provided ReadSeeker. The main benefit of ServeContent over io.Copy is that it handles Range http.Requests properly, sets the MIME type, and handles If-Match, If-Unmodified-Since, If-None-Match, If-Modified-Since, and If-Range http.Requests.
If the response's Content-Type header is not set, ServeContent first tries to deduce the type from name's file extension and, if that fails, falls back to reading the first block of the content and passing it to DetectContentType. The name is otherwise unused; in particular it can be empty and is never sent in the response.
If modtime is not the zero time or Unix epoch, ServeContent includes it in a Last-Modified header in the response. If the http.Request includes an If-Modified-Since header, ServeContent uses modtime to decide whether the content needs to be sent at all.
The content's Seek method must work: ServeContent uses a seek to the end of the content to determine its size.
If the caller has set w's ETag header formatted per RFC 7232, section 2.3, ServeContent uses it to handle http.Requests using If-Match, If-None-Match, or If-Range.
Note that *os.File implements the io.ReadSeeker interface.
func ServeFile ¶
func ServeFile(w http.ResponseWriter, r *http.Request, name string)
ServeFile replies to the http.Request with the contents of the named file or directory.
If the provided file or directory name is a relative path, it is interpreted relative to the current directory and may ascend to parent directories. If the provided name is constructed from user input, it should be sanitized before calling ServeFile.
As a precaution, ServeFile will reject http.Requests where r.URL.Path contains a ".." path element; this protects against callers who might unsafely use filepath.Join on r.URL.Path without sanitizing it and then use that filepath.Join result as the name argument.
As another special case, ServeFile redirects any http.Request where r.URL.Path ends in "/index.html" to the same path, without the final "index.html". To avoid such redirects either modify the path or use ServeContent.
Outside of those two special cases, ServeFile does not use r.URL.Path for selecting the file or directory to serve; only the file or directory provided in the name argument is used.
func StartSimulateErrorServer
deprecated
func StartSimulateErrorServer(_ *Config)
Deprecated:
func WithCurrentConfigurable ¶
func WithCurrentConfigurable(f func(configurable Configurable))
Types ¶
type Config ¶
type Config struct { UpHosts []string `json:"up_hosts" toml:"up_hosts"` RsHosts []string `json:"rs_hosts" toml:"rs_hosts"` RsfHosts []string `json:"rsf_hosts" toml:"rsf_hosts"` ApiServerHosts []string `json:"api_server_hosts" toml:"api_server_hosts"` Bucket string `json:"bucket" toml:"bucket"` Ak string `json:"ak" toml:"ak"` Sk string `json:"sk" toml:"sk"` PartSize int64 `json:"part" toml:"part"` Addr string `json:"addr" toml:"addr"` Delete bool `json:"delete" toml:"delete"` UpConcurrency int `json:"up_concurrency" toml:"up_concurrency"` BatchConcurrency int `json:"batch_concurrency" toml:"batch_concurrency"` BatchSize int `json:"batch_size" toml:"batch_size"` DownPath string `json:"down_path" toml:"down_path"` Sim bool `json:"sim" toml:"sim"` IoHosts []string `json:"io_hosts" toml:"io_hosts"` UcHosts []string `json:"uc_hosts" toml:"uc_hosts"` RecycleBin string `json:"recycle_bin" toml:"recycle_bin"` // contains filtered or unexported fields }
Config 配置文件
type Configurable ¶
type Configurable interface {
// contains filtered or unexported methods
}
type CopyKeyInput ¶
type CopyKeyInput FromToKey
type CopyKeysError ¶
type CopyKeysError FromToKeyError
type DeleteKeysError ¶
type DeleteKeysError SingleKeyError
type Dir ¶
type Dir string
A Dir implements FileSystem using the native file system restricted to a specific directory tree.
While the FileSystem.Open method takes '/'-separated paths, a Dir's string value is a filename on the native file system, not a URL, so it is separated by filepath.Separator, which isn't necessarily '/'.
Note that Dir could expose sensitive files and directories. Dir will follow symlinks pointing out of the directory tree, which can be especially dangerous if serving from a directory in which users are able to create arbitrary symlinks. Dir will also allow access to files and directories starting with a period, which could expose sensitive directories like .git or sensitive files like .htpasswd. To exclude files with a leading period, remove the files/directories from the server or create a custom FileSystem implementation.
An empty Dir is treated as ".".
type Downloader ¶
type Downloader struct {
// contains filtered or unexported fields
}
Downloader 下载器
func (*Downloader) DownloadBytes ¶
func (d *Downloader) DownloadBytes(key string) (data []byte, err error)
DownloadBytes 下载指定对象到内存中
func (*Downloader) DownloadCheck ¶
func (d *Downloader) DownloadCheck(key string) (l int64, err error)
DownloadCheck 检查文件
func (*Downloader) DownloadCheckList ¶
DownloadCheckList 检查多个文件
func (*Downloader) DownloadFile ¶
func (d *Downloader) DownloadFile(key, path string) (f *os.File, err error)
DownloadFile 下载指定对象到文件里
func (*Downloader) DownloadRangeBytes ¶
func (d *Downloader) DownloadRangeBytes(key string, offset, size int64) (l int64, data []byte, err error)
DownloadRangeBytes 下载指定对象的指定范围到内存中
func (*Downloader) DownloadRangeReader ¶
func (d *Downloader) DownloadRangeReader(key string, offset, size int64) (l int64, reader io.ReadCloser, err error)
DownloadRangeReader 下载指定对象的指定范围为Reader
func (*Downloader) DownloadRaw ¶
DownloadRaw 使用给定的 HTTP Header 请求下载接口,并直接获得 http.Response 响应
type File ¶
type File interface { io.Closer io.Reader io.Seeker Readdir(count int) ([]os.FileInfo, error) Stat() (os.FileInfo, error) }
A File is returned by a FileSystem's Open method and can be served by the FileServer implementation.
The methods should behave the same as those on an *os.File.
type FileStat ¶
type FileStat struct { Name string `json:"name"` Size int64 `json:"size"` // contains filtered or unexported fields }
FileStat 文件元信息
type FileSystem ¶
A FileSystem implements access to a collection of named files. The elements in a file path are separated by slash ('/', U+002F) characters, regardless of host operating system convention.
type FromToKeyError ¶
type Lister ¶
type Lister struct {
// contains filtered or unexported fields
}
Lister 列举器
func (*Lister) CopyDirectory ¶
func (l *Lister) CopyDirectory(srcDir, destDir string) (copyErrors []CopyKeysError, err error)
CopyDirectory 目录级别的Copy操作
func (*Lister) CopyKeys ¶
func (l *Lister) CopyKeys(input []CopyKeyInput) ([]*CopyKeysError, error)
CopyKeys 批量复制
func (*Lister) DeleteDirectory ¶
func (l *Lister) DeleteDirectory(dir string) (deleteErrors []DeleteKeysError, err error)
DeleteDirectory 目录级别的Delete操作
func (*Lister) DeleteKeys ¶
func (l *Lister) DeleteKeys(keys []string) ([]*DeleteKeysError, error)
DeleteKeys 删除多个对象,如果配置了回收站,该 API 将会将文件移动到回收站中,而不做实际的删除
func (*Lister) ForceDelete ¶
ForceDelete 强制删除指定对象,无论是否配置回收站,该 API 都会直接删除文件
func (*Lister) ForceDeleteDirectory ¶
func (l *Lister) ForceDeleteDirectory(dir string) (deleteErrors []DeleteKeysError, err error)
ForceDeleteDirectory 目录级别的强制Delete操作
func (*Lister) ForceDeleteKeys ¶
func (l *Lister) ForceDeleteKeys(keys []string) ([]*DeleteKeysError, error)
ForceDeleteKeys 强制删除多个对象,无论是否配置回收站,该 API 都会直接删除文件
func (*Lister) ListPrefix ¶
ListPrefix 根据前缀列举存储空间
func (*Lister) MoveDirectoryTo ¶
func (l *Lister) MoveDirectoryTo(srcDir, destDir, toBucket string) (moveErrors []MoveKeysError, err error)
MoveDirectoryTo 目录级别的Move操作
func (*Lister) MoveKeys ¶
func (l *Lister) MoveKeys(input []MoveKeyInput) ([]*MoveKeysError, error)
MoveKeys 批量移动
func (*Lister) RenameDirectory ¶
func (l *Lister) RenameDirectory(srcDir, destDir string) (renameErrors []RenameKeysError, err error)
RenameDirectory 目录级别的Rename操作
func (*Lister) RenameKeys ¶
func (l *Lister) RenameKeys(input []RenameKeyInput) ([]*RenameKeysError, error)
RenameKeys 批量重命名
type MoveKeyInput ¶
type MoveKeysError ¶
type MoveKeysError struct { FromToKeyError ToBucket string }
type MultiClustersConfig ¶
type MultiClustersConfig struct {
// contains filtered or unexported fields
}
MultiClustersConfig 多集群配置文件
func LoadMultiClusterConfigs ¶
func LoadMultiClusterConfigs(file string) (*MultiClustersConfig, error)
LoadMultiClusterConfigs 加载多集群配置文件
func (*MultiClustersConfig) SetConfigSelectCallback ¶
func (config *MultiClustersConfig) SetConfigSelectCallback(f func(configs map[string]*Config, key string) (*Config, bool))
SetConfigSelectCallback 设置一个配置选取策略回调
type Queryer ¶
type Queryer struct {
// contains filtered or unexported fields
}
Queryer 域名查询器
func (*Queryer) QueryApiServerHosts ¶
QueryApiServerHosts 查询 APISERVER 服务器 URL
func (*Queryer) QueryIoHosts ¶
QueryIoHosts 查询 IO 服务器 URL
func (*Queryer) QueryRsHosts ¶
QueryRsHosts 查询 RS 服务器 URL
func (*Queryer) QueryRsfHosts ¶
QueryRsfHosts 查询 RSF 服务器 URL
func (*Queryer) QueryUpHosts ¶
QueryUpHosts 查询 UP 服务器 URL
type RenameKeyInput ¶
type RenameKeyInput FromToKey
type RenameKeysError ¶
type RenameKeysError FromToKeyError
type SingleKeyError ¶
type Uploader ¶
type Uploader struct {
// contains filtered or unexported fields
}
Uploader 上传器
func (*Uploader) UploadData ¶
UploadData 上传内存数据到指定对象中
func (*Uploader) UploadDataReader ¶
UploadDataReader 从 Reader 中阅读指定大小的数据并上传到指定对象中
Source Files ¶
- apiserver.go
- apiserver_multi_cluster.go
- apiserver_single_cluster.go
- choose_host.go
- config_configurable.go
- config_multi_cluster_configurable.go
- config_single_cluster_configurable.go
- debug.go
- download.go
- download_multi_cluster_downloader.go
- download_single_cluster_downloader.go
- fs.go
- init.go
- list_abstract_cluster_lister.go
- list_lister.go
- list_multi_cluster_lister.go
- list_single_cluster_lister.go
- log.go
- query.go
- server.go
- upload.go
- upload_multi_cluster_lister.go
- upload_single_cluster_uploader.go
- utils.go
- watcher.go