Sample code for 30+ languages & platforms
Go

FTP Download Binary File to a Stream

See more FTP Examples

Demonstrates how to FTP download a binary file to a Chilkat stream.

Note: This example requires Chilkat v9.5.0.67 or greater.

Chilkat Go Downloads

Go
    success := false

    // This example assumes the Chilkat FTP2 API to have been previously unlocked.
    // See FTP2 Unlock Sample for sample code.

    ftp := chilkat.NewFtp2()

    ftp.SetHostname("www.my-ftp-server.com")
    ftp.SetUsername("mFtpLogin")
    ftp.SetPassword("myFtpPassword")
    ftp.SetAuthTls(true)
    ftp.SetPassive(true)

    // Connect and login to the FTP server using TLS.
    success = ftp.Connect()
    if success != true {
        fmt.Println(ftp.LastErrorText())
        ftp.DisposeFtp2()
        return
    }

    // We'll read the incoming data chunk-by-chunk and write to an output file.
    fac := chilkat.NewFileAccess()
    success = fac.OpenForWrite("qa_output/penguins2.jpg")
    if success != true {
        fmt.Println(fac.LastErrorText())
        ftp.DisposeFtp2()
        fac.DisposeFileAccess()
        return
    }

    streamObj := chilkat.NewStream()

    // Create a task to do the FTP download.
    c := make(chan *chilkat.Task)
    go ftp.GetFileToStreamAsync("penguins2.jpg",streamObj,c)
    t := <-c
    if ftp.LastMethodSuccess() != true {
        fmt.Println(ftp.LastErrorText())
        ftp.DisposeFtp2()
        fac.DisposeFileAccess()
        streamObj.DisposeStream()
        t.DisposeTask()
        return
    }

    // Start the task in a background thread.

    bd := chilkat.NewBinData()
    for streamObj.EndOfStream() != true {
        // Get the next chunk of JPG bytes.
        streamObj.ReadBd(bd)
        // Do something with it..
        // In this simple example, we'll just write to the file.
        fac.FileWriteBd(bd,0,0)
        // Clear for the next read.
        bd.Clear()
    }

    fac.FileClose()

    t.DisposeTask()

    fmt.Println("Success.")

    ftp.DisposeFtp2()
    fac.DisposeFileAccess()
    streamObj.DisposeStream()
    t.DisposeTask()
    bd.DisposeBinData()