package main
import (
"fmt"
"io"
"log"
"os"
"strings"
"time"
"github.com/jlaffaye/ftp"
)
var (
Host = "127.0.0.1:21"
User = "test"
Pwd = "test"
FtpPath = "/wwwroot"
LocalPath = "target"
)
func main() {
c, err := ftp.Dial(Host, ftp.DialWithTimeout(5*time.Second))
if err != nil {
log.Fatal(err)
}
defer c.Quit()
err = c.Login(User, Pwd)
if err != nil {
log.Fatal(err)
}
walker := c.Walk(FtpPath)
for walker.Next() {
local := strings.Replace(walker.Path(), FtpPath, LocalPath, 1)
if walker.Stat().Type == ftp.EntryTypeFolder {
os.MkdirAll(local, 0777)
} else {
func() {
f, err := os.OpenFile(local, os.O_RDWR|os.O_CREATE, 0777)
if err != nil {
fmt.Println("Create File error", err)
return
}
defer f.Close()
r, err := c.Retr(walker.Path())
if err != nil {
fmt.Println("Get Ftp File error", err)
return
}
defer r.Close()
io.Copy(f, r)
}()
}
}
// Do something with the FTP conn
}