Technical Documentation: AlistGo/alist
ℹ️ Provenance: Multi-Tier Ingestion · CodeWiki Reference
Overview (`README.md`)
English | 中文 | 日本語 | Contributing | CODE_OF_CONDUCT
Features
- Multiple storages
- Local storage
- Aliyundrive
- OneDrive / Sharepoint (global, cn,de,us)
- 189cloud (Personal, Family)
- GoogleDrive
- 123pan
- FTP / SFTP
- PikPak
- S3
- Seafile
- UPYUN Storage Service
- WebDav(Support OneDrive/SharePoint without API)
- Teambition(China,International)
- MediaFire
- Mediatrack
- ProtonDrive
- 139yun (Personal, Family, Group)
- YandexDisk
- BaiduNetdisk
- Terabox
- UC
- Quark
- Thunder
- Lanzou
- ILanzou
- Aliyundrive share
- Google photo
- Mega.nz
- Baidu photo
- SMB
- 115
- Cloudreve
- Dropbox
- FeijiPan
- dogecloud
- Azure Blob Storage
- Easy to deploy and out-of-the-box
- File preview (PDF, markdown, code, plain text, ...)
- Image preview in gallery mode
- Video and audio preview, support lyrics and subtitles
- Office documents preview (docx, pptx, xlsx, ...)
-
README.mdpreview rendering - File permalink copy and direct file download
- Dark mode
- I18n
- Protected routes (password protection and authentication)
- WebDav (see https://alistgo.com/guide/webdav.html for details)
- Docker Deploy
- Cloudflare Workers proxy
- File/Folder package download
- Web upload(Can allow visitors to upload), delete, mkdir, rename, move and copy
- Offline download
- Copy files between two storage
- Multi-thread downloading acceleration for single-thread download/stream
Document
API Documentation (via Apifox):
https://alist-public.apifox.cn/
Demo
Discussion
Please go to our discussion forum for general questions, issues are for bug reports and feature requests only.
Sponsor
AList is an open-source software, if you happen to like this project and want me to keep going, please consider sponsoring me or providing a single donation! Thanks for all the love and support:
https://alistgo.com/guide/sponsor.html
Special sponsors
- VidHub - An elegant cloud video player within the Apple ecosystem. Support for iPhone, iPad, Mac, and Apple TV.
Contributors
Thanks goes to these wonderful people:
License
The AList is open-source software licensed under the AGPL-3.0 license.
Disclaimer
- This program is a free and open source project. It is designed to share files on the network disk, which is convenient for downloading and learning Golang. Please abide by relevant laws and regulations when using it, and do not abuse it;
- This program is implemented by calling the official sdk/interface, without destroying the official interface behavior;
- This program only does 302 redirect/traffic forwarding, and does not intercept, store, or tamper with any user data;
- Before using this program, you should understand and bear the corresponding risks, including but not limited to account ban, download speed limit, etc., which is none of this program's business;
- If there is any infringement, please contact me by email, and it will be dealt with in time.
Overview (`pkg/gowebdav/README.md`)
GoWebDAV
A golang WebDAV client library.
Main features
gowebdav library allows to perform following actions on the remote WebDAV server:
- create path
- get files list
- download file
- upload file
- get information about specified file/folder
- move file to another location
- copy file to another location
- delete file
Usage
First of all you should create Client instance using NewClient() function:
root := "https://webdav.mydomain.me"
user := "user"
password := "password"
c := gowebdav.NewClient(root, user, password)After you can use this Client to perform actions, described below.
NOTICE: we will not check errors in examples, to focus you on the gowebdav library's code, but you should do it in your code!
Create path on a WebDAV server
err := c.Mkdir("folder", 0644)In case you want to create several folders you can use c.MkdirAll():
err := c.MkdirAll("folder/subfolder/subfolder2", 0644)Get files list
files, _ := c.ReadDir("folder/subfolder")
for _, file := range files {
//notice that [file] has os.FileInfo type
fmt.Println(file.Name())
}Download file to byte array
webdavFilePath := "folder/subfolder/file.txt"
localFilePath := "/tmp/webdav/file.txt"
bytes, _ := c.Read(webdavFilePath)
ioutil.WriteFile(localFilePath, bytes, 0644)Download file via reader
Also you can use c.ReadStream() method:
webdavFilePath := "folder/subfolder/file.txt"
localFilePath := "/tmp/webdav/file.txt"
reader, _ := c.ReadStream(webdavFilePath)
file, _ := os.Create(localFilePath)
defer file.Close()
io.Copy(file, reader)Upload file from byte array
webdavFilePath := "folder/subfolder/file.txt"
localFilePath := "/tmp/webdav/file.txt"
bytes, _ := ioutil.ReadFile(localFilePath)
c.Write(webdavFilePath, bytes, 0644)Upload file via writer
webdavFilePath := "folder/subfolder/file.txt"
localFilePath := "/tmp/webdav/file.txt"
file, _ := os.Open(localFilePath)
defer file.Close()
c.WriteStream(webdavFilePath, file, 0644)Get information about specified file/folder
webdavFilePath := "folder/subfolder/file.txt"
info := c.Stat(webdavFilePath)
//notice that [info] has os.FileInfo type
fmt.Println(info)Move file to another location
oldPath := "folder/subfolder/file.txt"
newPath := "folder/subfolder/moved.txt"
isOverwrite := true
c.Rename(oldPath, newPath, isOverwrite)Copy file to another location
oldPath := "folder/subfolder/file.txt"
newPath := "folder/subfolder/file-copy.txt"
isOverwrite := true
c.Copy(oldPath, newPath, isOverwrite)Delete file
webdavFilePath := "folder/subfolder/file.txt"
c.Remove(webdavFilePath)Links
More details about WebDAV server you can read from following resources:
- RFC 4918 - HTTP Extensions for Web Distributed Authoring and Versioning (WebDAV)
- RFC 5689 - Extended MKCOL for Web Distributed Authoring and Versioning (WebDAV)
- RFC 2616 - HTTP/1.1 Status Code Definitions
- WebDav: Next Generation Collaborative Web Authoring By Lisa Dusseaul
NOTICE: RFC 2518 is obsoleted by RFC 4918 in June 2007
Contributing
All contributing are welcome. If you have any suggestions or find some bug - please create an Issue to let us make this project better. We appreciate your help!
License
This library is distributed under the BSD 3-Clause license found in the LICENSE file.
API
import "github.com/studio-b12/gowebdav"
Overview
Package gowebdav is a WebDAV client library with a command line tool
included.
Index
- func FixSlash(s string) string
- func FixSlashes(s string) string
- func Join(path0 string, path1 string) string
- func PathEscape(path string) string
- func ReadConfig(uri, netrc string) (string, string)
- func String(r io.Reader) string
- type Authenticator
- type BasicAuth
- type Client
- func NewClient(uri, user, pw string) *Client
- func (c *Client) Connect() error
- func (c *Client) Copy(oldpath, newpath string, overwrite bool) error
- func (c *Client) Mkdir(path string, _ os.FileMode) error
- func (c *Client) MkdirAll(path string, _ os.FileMode) error
- func (c *Client) Read(path string) ([]byte, error)
- func (c *Client) ReadDir(path string) ([]os.FileInfo, error)
- func (c *Client) ReadStream(path string) (io.ReadCloser, error)
- func (c *Client) ReadStreamRange(path string, offset, length int64) (io.ReadCloser, error)
- func (c *Client) Remove(path string) error
- func (c *Client) RemoveAll(path string) error
- func (c *Client) Rename(oldpath, newpath string, overwrite bool) error
- func (c *Client) SetHeader(key, value string)
- func (c *Client) SetInterceptor(interceptor func(method string, rq *http.Request))
- func (c *Client) SetTimeout(timeout time.Duration)
- func (c *Client) SetTransport(transport http.RoundTripper)
- func (c *Client) Stat(path string) (os.FileInfo, error)
- func (c *Client) Write(path string, data []byte, _ os.FileMode) error
- func (c *Client) WriteStream(path string, stream io.Reader, _ os.FileMode) error
- type DigestAuth
- type File
- func (f File) ContentType() string
- func (f File) ETag() string
- func (f File) IsDir() bool
- func (f File) ModTime() time.Time
- func (f File) Mode() os.FileMode
- func (f File) Name() string
- func (f File) Path() string
- func (f File) Size() int64
- func (f File) String() string
- func (f File) Sys() interface{}
- type NoAuth
Examples
Package files
basicAuth.go client.go digestAuth.go doc.go file.go netrc.go requests.go utils.go
func [FixSlash](https://github.com/studio-b12/gowebdav/blob/master/utils.go?s=707:737#L45)
func FixSlash(s string) stringFixSlash appends a trailing / to our string
func [FixSlashes](https://github.com/studio-b12/gowebdav/blob/master/utils.go?s=859:891#L53)
func FixSlashes(s string) stringFixSlashes appends and prepends a / if they are missing
func [Join](https://github.com/studio-b12/gowebdav/blob/master/utils.go?s=992:1036#L62)
func Join(path0 string, path1 string) stringJoin joins two paths
func [PathEscape](https://github.com/studio-b12/gowebdav/blob/master/utils.go?s=506:541#L36)
func PathEscape(path string) stringPathEscape escapes all segments of a given path
func [ReadConfig](https://github.com/studio-b12/gowebdav/blob/master/netrc.go?s=428:479#L27)
func ReadConfig(uri, netrc string) (string, string)ReadConfig reads login and password configuration from ~/.netrc
machine foo.com login username password 123456
func [String](https://github.com/studio-b12/gowebdav/blob/master/utils.go?s=1166:1197#L67)
func String(r io.Reader) stringString pulls a string out of our io.Reader
type [Authenticator](https://github.com/studio-b12/gowebdav/blob/master/client.go?s=388:507#L29)
type Authenticator interface {
Type() string
User() string
Pass() string
Authorize(*http.Request, string, string)
}Authenticator stub
type [BasicAuth](https://github.com/studio-b12/gowebdav/blob/master/basicAuth.go?s=106:157#L9)
type BasicAuth struct {
// contains filtered or unexported fields
}BasicAuth structure holds our credentials
func (\*BasicAuth) [Authorize](https://github.com/studio-b12/gowebdav/blob/master/basicAuth.go?s=473:549#L30)
func (b *BasicAuth) Authorize(req *http.Request, method string, path string)Authorize the current request
func (\*BasicAuth) [Pass](https://github.com/studio-b12/gowebdav/blob/master/basicAuth.go?s=388:421#L25)
func (b *BasicAuth) Pass() stringPass holds the BasicAuth password
func (\*BasicAuth) [Type](https://github.com/studio-b12/gowebdav/blob/master/basicAuth.go?s=201:234#L15)
func (b *BasicAuth) Type() stringType identifies the BasicAuthenticator
func (\*BasicAuth) [User](https://github.com/studio-b12/gowebdav/blob/master/basicAuth.go?s=297:330#L20)
func (b *BasicAuth) User() stringUser holds the BasicAuth username
type [Client](https://github.com/studio-b12/gowebdav/blob/master/client.go?s=172:364#L18)
type Client struct {
// contains filtered or unexported fields
}Client defines our structure
func [NewClient](https://github.com/studio-b12/gowebdav/blob/master/client.go?s=1019:1063#L62)
func NewClient(uri, user, pw string) *ClientNewClient creates a new instance of client
func (\*Client) [Connect](https://github.com/studio-b12/gowebdav/blob/master/client.go?s=1843:1875#L87)
func (c *Client) Connect() errorConnect connects to our dav server
func (\*Client) [Copy](https://github.com/studio-b12/gowebdav/blob/master/client.go?s=6702:6770#L313)
func (c *Client) Copy(oldpath, newpath string, overwrite bool) errorCopy copies a file from A to B
func (\*Client) [Mkdir](https://github.com/studio-b12/gowebdav/blob/master/client.go?s=5793:5849#L272)
func (c *Client) Mkdir(path string, _ os.FileMode) errorMkdir makes a directory
func (\*Client) [MkdirAll](https://github.com/studio-b12/gowebdav/blob/master/client.go?s=6028:6087#L283)
func (c *Client) MkdirAll(path string, _ os.FileMode) errorMkdirAll like mkdir -p, but for webdav
func (\*Client) [Read](https://github.com/studio-b12/gowebdav/blob/master/client.go?s=6876:6926#L318)
func (c *Client) Read(path string) ([]byte, error)Read reads the contents of a remote file
func (\*Client) [ReadDir](https://github.com/studio-b12/gowebdav/blob/master/client.go?s=2869:2929#L130)
func (c *Client) ReadDir(path string) ([]os.FileInfo, error)ReadDir reads the contents of a remote directory
func (\*Client) [ReadStream](https://github.com/studio-b12/gowebdav/blob/master/client.go?s=7237:7300#L336)
func (c *Client) ReadStream(path string) (io.ReadCloser, error)ReadStream reads the stream for a given path
func (\*Client) [ReadStreamRange](https://github.com/studio-b12/gowebdav/blob/master/client.go?s=8049:8139#L358)
func (c *Client) ReadStreamRange(path string, offset, length int64) (io.ReadCloser, error)ReadStreamRange reads the stream representing a subset of bytes for a given path,
utilizing HTTP Range Requests if the server supports it.
The range is expressed as offset from the start of the file and length, for example
offset=10, length=10 will return bytes 10 through 19.
If the server does not support partial content requests and returns full content instead,
this function will emulate the behavior by skipping offset bytes and limiting the result
to length.
func (\*Client) [Remove](https://github.com/studio-b12/gowebdav/blob/master/client.go?s=5299:5341#L249)
func (c *Client) Remove(path string) errorRemove removes a remote file
func (\*Client) [RemoveAll](https://github.com/studio-b12/gowebdav/blob/master/client.go?s=5407:5452#L254)
func (c *Client) RemoveAll(path string) errorRemoveAll removes remote files
func (\*Client) [Rename](https://github.com/studio-b12/gowebdav/blob/master/client.go?s=6536:6606#L308)
func (c *Client) Rename(oldpath, newpath string, overwrite bool) errorRename moves a file from A to B
func (\*Client) [SetHeader](https://github.com/studio-b12/gowebdav/blob/master/client.go?s=1235:1280#L67)
func (c *Client) SetHeader(key, value string)SetHeader lets us set arbitrary headers for a given client
func (\*Client) [SetInterceptor](https://github.com/studio-b12/gowebdav/blob/master/client.go?s=1387:1469#L72)
func (c *Client) SetInterceptor(interceptor func(method string, rq *http.Request))SetInterceptor lets us set an arbitrary interceptor for a given client
func (\*Client) [SetTimeout](https://github.com/studio-b12/gowebdav/blob/master/client.go?s=1571:1621#L77)
func (c *Client) SetTimeout(timeout time.Duration)SetTimeout exposes the ability to set a time limit for requests
func (\*Client) [SetTransport](https://github.com/studio-b12/gowebdav/blob/master/client.go?s=1714:1772#L82)
func (c *Client) SetTransport(transport http.RoundTripper)SetTransport exposes the ability to define custom transports
func (\*Client) [Stat](https://github.com/studio-b12/gowebdav/blob/master/client.go?s=4255:4310#L197)
func (c *Client) Stat(path string) (os.FileInfo, error)Stat returns the file stats for a specified path
func (\*Client) [Write](https://github.com/studio-b12/gowebdav/blob/master/client.go?s=9051:9120#L388)
func (c *Client) Write(path string, data []byte, _ os.FileMode) errorWrite writes data to a given path
func (\*Client) [WriteStream](https://github.com/studio-b12/gowebdav/blob/master/client.go?s=9476:9556#L411)
func (c *Client) WriteStream(path string, stream io.Reader, _ os.FileMode) errorWriteStream writes a stream
type [DigestAuth](https://github.com/studio-b12/gowebdav/blob/master/digestAuth.go?s=157:254#L14)
type DigestAuth struct {
// contains filtered or unexported fields
}DigestAuth structure holds our credentials
func (\*DigestAuth) [Authorize](https://github.com/studio-b12/gowebdav/blob/master/digestAuth.go?s=577:654#L36)
func (d *DigestAuth) Authorize(req *http.Request, method string, path string)Authorize the current request
func (\*DigestAuth) [Pass](https://github.com/studio-b12/gowebdav/blob/master/digestAuth.go?s=491:525#L31)
func (d *DigestAuth) Pass() stringPass holds the DigestAuth password
func (\*DigestAuth) [Type](https://github.com/studio-b12/gowebdav/blob/master/digestAuth.go?s=299:333#L21)
func (d *DigestAuth) Type() stringType identifies the DigestAuthenticator
func (\*DigestAuth) [User](https://github.com/studio-b12/gowebdav/blob/master/digestAuth.go?s=398:432#L26)
func (d *DigestAuth) User() stringUser holds the DigestAuth username
type [File](https://github.com/studio-b12/gowebdav/blob/master/file.go?s=93:253#L10)
type File struct {
// contains filtered or unexported fields
}File is our structure for a given file
func (File) [ContentType](https://github.com/studio-b12/gowebdav/blob/master/file.go?s=476:510#L31)
func (f File) ContentType() stringContentType returns the content type of a file
func (File) [ETag](https://github.com/studio-b12/gowebdav/blob/master/file.go?s=929:956#L56)
func (f File) ETag() stringETag returns the ETag of a file
func (File) [IsDir](https://github.com/studio-b12/gowebdav/blob/master/file.go?s=1035:1061#L61)
func (f File) IsDir() boolIsDir let us see if a given file is a directory or not
func (File) [ModTime](https://github.com/studio-b12/gowebdav/blob/master/file.go?s=836:869#L51)
func (f File) ModTime() time.TimeModTime returns the modified time of a file
func (File) [Mode](https://github.com/studio-b12/gowebdav/blob/master/file.go?s=665:697#L41)
func (f File) Mode() os.FileModeMode will return the mode of a given file
func (File) [Name](https://github.com/studio-b12/gowebdav/blob/master/file.go?s=378:405#L26)
func (f File) Name() stringName returns the name of a file
func (File) [Path](https://github.com/studio-b12/gowebdav/blob/master/file.go?s=295:322#L21)
func (f File) Path() stringPath returns the full path of a file
func (File) [Size](https://github.com/studio-b12/gowebdav/blob/master/file.go?s=573:599#L36)
func (f File) Size() int64Size returns the size of a file
func (File) [String](https://github.com/studio-b12/gowebdav/blob/master/file.go?s=1183:1212#L71)
func (f File) String() stringString lets us see file information
func (File) [Sys](https://github.com/studio-b12/gowebdav/blob/master/file.go?s=1095:1126#L66)
func (f File) Sys() interface{}Sys ????
type [NoAuth](https://github.com/studio-b12/gowebdav/blob/master/client.go?s=551:599#L37)
type NoAuth struct {
// contains filtered or unexported fields
}NoAuth structure holds our credentials
func (\*NoAuth) [Authorize](https://github.com/studio-b12/gowebdav/blob/master/client.go?s=894:967#L58)
func (n *NoAuth) Authorize(req *http.Request, method string, path string)Authorize the current request
func (\*NoAuth) [Pass](https://github.com/studio-b12/gowebdav/blob/master/client.go?s=812:842#L53)
func (n *NoAuth) Pass() stringPass returns the current password
func (\*NoAuth) [Type](https://github.com/studio-b12/gowebdav/blob/master/client.go?s=638:668#L43)
func (n *NoAuth) Type() stringType identifies the authenticator
func (\*NoAuth) [User](https://github.com/studio-b12/gowebdav/blob/master/client.go?s=724:754#L48)
func (n *NoAuth) User() stringUser returns the current user
Generated by godoc2md
Overview (`pkg/aria2/rpc/README.md`)
PACKAGE DOCUMENTATION
package rpc
import "github.com/matzoe/argo/rpc"FUNCTIONS
func Call(address, method string, params, reply interface{}) errorTYPES
type Client struct {
// contains filtered or unexported fields
}func New(uri string) *Clientfunc (id *Client) AddMetalink(uri string, options ...interface{}) (gid string, err error)aria2.addMetalink(metalink[, options[, position]]) This method adds Metalink download by uploading ".metalink" file. metalink is of type base64 which contains Base64-encoded ".metalink" file. options is of type struct and its members are a pair of option name and value. See Options below for more details. If position is given as an integer starting from 0, the new download is inserted at position in the
waiting queue. If position is not given or position is larger than the size of the queue, it is appended at the end of the queue. This method returns array of GID of registered download. If --rpc-save-upload-metadata is true, the uploaded data is saved as a file named hex string of SHA-1 hash of data plus ".metalink" in the directory specified by --dir option. The example of filename is 0a3893293e27ac0490424c06de4d09242215f0a6.metalink. If same file already exists, it is overwritten. If the file cannot be saved successfully or --rpc-save-upload-metadata is false, the downloads added by this method are not saved by --save-session.
func (id *Client) AddTorrent(filename string, options ...interface{}) (gid string, err error)aria2.addTorrent(torrent[, uris[, options[, position]]]) This method adds BitTorrent download by uploading ".torrent" file. If you want to add BitTorrent Magnet URI, use aria2.addUri() method instead. torrent is of type base64 which contains Base64-encoded ".torrent" file. uris is of type array and its element is URI which is of type string. uris is used for Web-seeding. For single file torrents, URI can be a complete URI pointing to the resource or if URI ends with /, name in torrent file is added. For multi-file torrents, name and path in torrent are added to form a URI for each file. options is of type struct and its members are
a pair of option name and value. See Options below for more details. If position is given as an integer starting from 0, the new download is inserted at position in the waiting queue. If position is not given or position is larger than the size of the queue, it is appended at the end of the queue. This method returns GID of registered download. If --rpc-save-upload-metadata is true, the uploaded data is saved as a file named hex string of SHA-1 hash of data plus ".torrent" in the
directory specified by --dir option. The example of filename is 0a3893293e27ac0490424c06de4d09242215f0a6.torrent. If same file already exists, it is overwritten. If the file cannot be saved successfully or --rpc-save-upload-metadata is false, the downloads added by this method are not saved by --save-session.
func (id *Client) AddUri(uri string, options ...interface{}) (gid string, err error)aria2.addUri(uris[, options[, position]]) This method adds new HTTP(S)/FTP/BitTorrent Magnet URI. uris is of type array and its element is URI which is of type string. For BitTorrent Magnet URI, uris must have only one element and it should be BitTorrent Magnet URI. URIs in uris must point to the same file. If you mix other URIs which point to another file, aria2 does not complain but download may
fail. options is of type struct and its members are a pair of option name and value. See Options below for more details. If position is given as an integer starting from 0, the new download is inserted at position in the waiting queue. If position is not given or position is larger than the size of the queue, it is appended at the end of the queue. This method returns GID of registered download.
func (id *Client) ChangeGlobalOption(options map[string]interface{}) (g string, err error)aria2.changeGlobalOption(options) This method changes global options dynamically. options is of type struct. The following options are available:
download-result
log
log-level
max-concurrent-downloads
max-download-result
max-overall-download-limit
max-overall-upload-limit
save-cookies
save-session
server-stat-ofIn addition to them, options listed in Input File subsection are available, except for following options: checksum, index-out, out, pause and select-file. Using log option, you can dynamically start logging or change log file. To stop logging, give empty string("") as a parameter value. Note that log file is always opened in append mode. This method returns OK for success.
func (id *Client) ChangeOption(gid string, options map[string]interface{}) (g string, err error)aria2.changeOption(gid, options) This method changes options of the download denoted by gid dynamically. gid is of type string. options is of type struct. The following options are available for active downloads:
bt-max-peers
bt-request-peer-speed-limit
bt-remove-unselected-file
force-save
max-download-limit
max-upload-limitFor waiting or paused downloads, in addition to the above options, options listed in Input File subsection are available, except for following options: dry-run, metalink-base-uri, parameterized-uri, pause, piece-length and rpc-save-upload-metadata option. This method returns OK for success.
func (id *Client) ChangePosition(gid string, pos int, how string) (p int, err error)aria2.changePosition(gid, pos, how) This method changes the position of the download denoted by gid. pos is of type integer. how is of type string. If how is POS_SET, it moves the download to a position relative to the beginning of the queue. If how is POS_CUR, it moves the download to a position relative to the current position. If how is POS_END, it moves the download to a position relative to the end of the queue. If the destination position is less than 0 or beyond the end
of the queue, it moves the download to the beginning or the end of the queue respectively. The response is of type integer and it is the destination position.
func (id *Client) ChangeUri(gid string, fileindex int, delUris []string, addUris []string, position ...int) (p []int, err error)aria2.changeUri(gid, fileIndex, delUris, addUris[, position]) This method removes URIs in delUris from and appends URIs in addUris to download denoted by gid. delUris and addUris are list of string. A download can contain multiple files and URIs are attached to each file. fileIndex is used to select which file to remove/attach given URIs. fileIndex is 1-based. position is used to specify where URIs are inserted in the existing waiting URI list. position is 0-based. Whenposition is omitted, URIs are appended to the back of the list. This method first execute removal and then addition. position is the position after URIs are removed, not the position when this method is called. When removing URI, if same URIs exist in download, only one of them is removed for each URI in delUris. In other words, there are three URIs http://example.org/aria2 and you want remove them all, you
have to specify (at least) 3 http://example.org/aria2 in delUris. This method returns a list which contains 2 integers. The first integer is the number of URIs deleted. The second integer is the number of URIs added.
func (id *Client) ForcePause(gid string) (g string, err error)aria2.forcePause(pid) This method pauses the download denoted by gid. This method behaves just like aria2.pause() except that this method pauses download without any action which takes time such as contacting BitTorrent tracker.
func (id *Client) ForcePauseAll() (g string, err error)aria2.forcePauseAll() This method is equal to calling aria2.forcePause() for every active/waiting download. This methods returns OK for success.
func (id *Client) ForceRemove(gid string) (g string, err error)aria2.forceRemove(gid) This method removes the download denoted by gid. This method behaves just like aria2.remove() except that this method removes download without any action which takes time such as contacting BitTorrent tracker.
func (id *Client) ForceShutdown() (g string, err error)aria2.forceShutdown() This method shutdowns aria2. This method behaves like aria2.shutdown() except that any actions which takes time such as contacting BitTorrent tracker are skipped. This method returns OK.
func (id *Client) GetFiles(gid string) (m map[string]interface{}, err error)aria2.getFiles(gid) This method returns file list of the download denoted by gid. gid is of type string.
func (id *Client) GetGlobalOption() (m map[string]interface{}, err error)aria2.getGlobalOption() This method returns global options. The response is of type struct. Its key is the name of option. The value type is string. Note that this method does not return options which have no default value and have not been set by the command-line options, configuration files or RPC methods. Because global options are used as a template for the options of newly added download, the response contains
keys returned by aria2.getOption() method.
func (id *Client) GetGlobalStat() (m map[string]interface{}, err error)aria2.getGlobalStat() This method returns global statistics such as overall download and upload speed.
func (id *Client) GetOption(gid string) (m map[string]interface{}, err error)aria2.getOption(gid) This method returns options of the download denoted by gid. The response is of type struct. Its key is the name of option. The value type is string. Note that this method does not return options which have no default value and have not been set by the command-line options, configuration files or RPC methods.
func (id *Client) GetPeers(gid string) (m []map[string]interface{}, err error)aria2.getPeers(gid) This method returns peer list of the download denoted by gid. gid is of type string. This method is for BitTorrent only.
func (id *Client) GetServers(gid string) (m []map[string]interface{}, err error)aria2.getServers(gid) This method returns currently connected HTTP(S)/FTP servers of the download denoted by gid. gid is of type string.
func (id *Client) GetSessionInfo() (m map[string]interface{}, err error)aria2.getSessionInfo() This method returns session information.
func (id *Client) GetUris(gid string) (m map[string]interface{}, err error)aria2.getUris(gid) This method returns URIs used in the download denoted by gid. gid is of type string.
func (id *Client) GetVersion() (m map[string]interface{}, err error)aria2.getVersion() This method returns version of the program and the list of enabled features.
func (id *Client) Multicall(methods []map[string]interface{}) (r []interface{}, err error)system.multicall(methods) This method encapsulates multiple method calls in a single request. methods is of type array and its element is struct. The struct contains two keys: methodName and params. methodName is the method name to call and params is array containing parameters to the method. This method returns array of responses. The element of array will either be a one-item array containing the return value of each method call or struct of fault element if an encapsulated method call fails.
func (id *Client) Pause(gid string) (g string, err error)aria2.pause(gid) This method pauses the download denoted by gid. gid is of type string. The status of paused download becomes paused. If the download is active, the download is placed on the first position of waiting queue. As long as the status is paused, the download is not started. To change status to waiting, use aria2.unpause() method. This method returns GID of paused download.
func (id *Client) PauseAll() (g string, err error)aria2.pauseAll() This method is equal to calling aria2.pause() for every active/waiting download. This methods returns OK for success.
func (id *Client) PurgeDownloadResult() (g string, err error)aria2.purgeDownloadResult() This method purges completed/error/removed downloads to free memory. This method returns OK.
func (id *Client) Remove(gid string) (g string, err error)aria2.remove(gid) This method removes the download denoted by gid. gid is of type string. If specified download is in progress, it is stopped at first. The status of removed download becomes removed. This method returns GID of removed download.
func (id *Client) RemoveDownloadResult(gid string) (g string, err error)aria2.removeDownloadResult(gid) This method removes completed/error/removed download denoted by gid from memory. This method returns OK for success.
func (id *Client) Shutdown() (g string, err error)aria2.shutdown() This method shutdowns aria2. This method returns OK.
func (id *Client) TellActive(keys ...string) (m []map[string]interface{}, err error)aria2.tellActive([keys]) This method returns the list of active downloads. The response is of type array and its element is the same struct returned by aria2.tellStatus() method. For keys parameter, please refer to aria2.tellStatus() method.
func (id *Client) TellStatus(gid string, keys ...string) (m map[string]interface{}, err error)aria2.tellStatus(gid[, keys]) This method returns download progress of the download denoted by gid. gid is of type string. keys is array of string. If it is specified, the response contains only keys in keys array. If keys is empty or not specified, the response contains all keys. This is useful when you just want specific keys and avoid unnecessary transfers. For example, aria2.tellStatus("2089b05ecca3d829", ["gid", "status"]) returns gid and status key.
func (id *Client) TellStopped(offset, num int, keys ...string) (m []map[string]interface{}, err error)aria2.tellStopped(offset, num[, keys]) This method returns the list of stopped download. offset is of type integer and specifies the offset from the oldest download. num is of type integer and specifies the number of downloads to be returned. For keys parameter, please refer to aria2.tellStatus() method. offset and num have the same semantics as aria2.tellWaiting() method. The response is of type array and its element is the same struct returned by aria2.tellStatus() method.
func (id *Client) TellWaiting(offset, num int, keys ...string) (m []map[string]interface{}, err error)aria2.tellWaiting(offset, num[, keys]) This method returns the list of waiting download, including paused downloads. offset is of type integer and specifies the offset from the download waiting at the front. num is of type integer and specifies the number of downloads to be returned. For keys parameter, please refer to aria2.tellStatus() method. If offset is a positive integer, this method returns downloads
in the range of [offset, offset + num). offset can be a negative integer. offset == -1 points last download in the waiting queue and offset == -2 points the download before the last download, and so on. The downloads in the response are in reversed order. For example, imagine that three downloads "A","B" and "C" are waiting in this order.
aria2.tellWaiting(0, 1) returns ["A"].
aria2.tellWaiting(1, 2) returns ["B", "C"].
aria2.tellWaiting(-1, 2) returns ["C", "B"].The response is of type array and its element is the same struct returned by aria2.tellStatus() method.
func (id *Client) Unpause(gid string) (g string, err error)aria2.unpause(gid) This method changes the status of the download denoted by gid from paused to waiting. This makes the download eligible to restart. gid is of type string. This method returns GID of unpaused download.
func (id *Client) UnpauseAll() (g string, err error)aria2.unpauseAll() This method is equal to calling aria2.unpause() for every active/waiting download. This methods returns OK for success.
Overview (`pkg/gowebdav/cmd/gowebdav/README.md`)
Description
Command line tool for gowebdav library.
Prerequisites
Software
- OS: all, which are supported by
Golang - Golang: version 1.x
- Git: version 2.14.2 at higher (required to install via
go get)
Install
go get -u github.com/studio-b12/gowebdav/cmd/gowebdavUsage
It is recommended to set following environment variables to improve your experience with this tool:
ROOTis an URL of target WebDAV server (e.g.https://webdav.mydomain.me/user_root_folder)USERis a login to connect to specified server (e.g.user)PASSWORDis a password to connect to specified server (e.g.p@s$w0rD)
In following examples we suppose that:
- environment variable
ROOTis set tohttps://webdav.mydomain.me/ufolder - environment variable
USERis set touser - environment variable
PASSWORDis setp@s$w0rD - folder
/ufolder/tempexists on the server - file
/ufolder/temp/file.txtexists on the server - file
/ufolder/temp/document.rtfexists on the server - file
/tmp/webdav/to_upload.txtexists on the local machine - folder
/tmp/webdav/is used to download files from the server
Examples
Get content of specified folder
gowebdav -X LS tempGet info about file/folder
gowebdav -X STAT temp
gowebdav -X STAT temp/file.txtCreate folder on the remote server
gowebdav -X MKDIR temp2
gowebdav -X MKDIRALL all/folders/which-you-want/to_createDownload file
gowebdav -X GET temp/document.rtf /tmp/webdav/document.rtfYou may do not specify target local path, in this case file will be downloaded to the current folder with the
Upload file
gowebdav -X PUT temp/uploaded.txt /tmp/webdav/to_upload.txtMove file on the remote server
gowebdav -X MV temp/file.txt temp/moved_file.txtCopy file to another location
gowebdav -X MV temp/file.txt temp/file-copy.txtDelete file from the remote server
gowebdav -X DEL temp/file.txtWrapper script
You can create wrapper script for your server (via $EDITOR ./dav && chmod a+x ./dav) and add following content to it:
#!/bin/sh
ROOT="https://my.dav.server/" \
USER="foo" \
PASSWORD="$(pass dav/[email protected])" \
gowebdav $@It allows you to use pass or similar tools to retrieve the password.
Examples
Using the dav wrapper:
$ ./dav -X LS /
$ echo hi dav! > hello && ./dav -X PUT /hello
$ ./dav -X STAT /hello
$ ./dav -X PUT /hello_dav hello
$ ./dav -X GET /hello_dav
$ ./dav -X GET /hello_dav hello.txt--- METRICS ---
- Files Extracted: 4
- Estimated Token Budget: ~11894 tokens
- Canonical Reference: https://codewiki.google/github.com/AlistGo/alist