FTP client package for Go
Go to file
Nicola Murino 08a1e2e380 try to read the server response after a failed upload
if the upload failed we still need to try to read the server
response otherwise if the failure is not due to a connection problem,
for example the server denied the upload for quota limits, we miss
the response and we cannot use the connection to send other commands

Here is what happen before this patch:

C->S STOR test_file1.dat
S->C 150 Using transfer connection
S->C 550 Could not transfer file: denying write due to space limit

the client does not read the above 550 response and send the next command, so
the response for the STOR response will be readed as response for the next
command
2020-07-30 14:55:31 +02: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 try to read the server response after a failed upload 2020-07-30 14:55:31 +02: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))