FTP client package for Go
Go to file
Nick Craig-Wood 6563ce9dff Workaround pure-ftpd connections failing with "Unknown command"
pure-ftpd 1.0.49-4 as supplied as part of Ubuntu 20.04 advertises UTF8
support in the FEAT command but the OPTS command fails to turn it on.

    OPTS UTF8 ON
    504 Unknown command

This patch introduces a workaround to ignore the error which enables
this library to work with this version of pure-ftpd. Filezilla appears
to ignore this error in a similar way.
2020-07-18 14:21:12 +01:00
.github stale bot: ignore accepted issues 2020-03-09 18:13:36 +01:00
.travis.yml Fix get of golint 2019-10-19 14:58:47 +02:00
client_test.go Add support for append (APPE) command 2020-03-10 11:43:17 +01:00
conn_test.go Add support for append (APPE) command 2020-03-10 11:43:17 +01:00
debug.go Add DialWithDebugOutput to log commands. 2019-04-17 13:16:26 +02:00
ftp.go Workaround pure-ftpd connections failing with "Unknown command" 2020-07-18 14:21:12 +01:00
go.mod Update dependencies 2020-07-08 08:20:38 +02:00
go.sum Update dependencies 2020-07-08 08:20:38 +02:00
LICENSE Update copyright years. 2013-02-17 10:34:01 +01:00
parse_test.go Use subtests and assert() 2020-07-08 08:33:57 +02:00
parse.go Correctly parse symlink (#152) 2019-06-24 10:48:59 +02:00
README.md add documentation shortcut, to make user able to go there easlity without typing it 2020-07-15 12:50:26 +07:00
scanner_test.go Do not export the scanner type 2017-03-04 13:01:41 +01:00
scanner.go Do not export the scanner type 2017-03-04 13:01:41 +01:00
status_test.go Add status string for unknown status codes 2020-07-08 08:23:44 +02:00
status.go Add status string for unknown status codes 2020-07-08 08:23:44 +02:00
walker_test.go Use subtests and assert() 2020-07-08 08:33:57 +02:00
walker.go fix_walk 2020-04-26 10:28:15 +03:00

goftp

Build Status Coverage Status Go ReportCard godoc.org

A FTP client package for Go

Install

go get -u github.com/jlaffaye/ftp

Documentation

https://pkg.go.dev/github.com/jlaffaye/ftp?tab=doc

Example

c, err := ftp.Dial("ftp.example.org:21", ftp.DialWithTimeout(5*time.Second))
if err != nil {
    log.Fatal(err)
}

err = c.Login("anonymous", "anonymous")
if err != nil {
    log.Fatal(err)
}

// Do something with the FTP conn

if err := c.Quit(); err != nil {
    log.Fatal(err)
}

Store a file example

data := bytes.NewBufferString("Hello World")
err = c.Stor("test-file.txt", data)
if err != nil {
	panic(err)
}

Read a file example

r, err := c.Retr("test-file.txt")
if err != nil {
	panic(err)
}
defer r.Close()

buf, err := ioutil.ReadAll(r)
println(string(buf))