Home  >  Article  >  Backend Development  >  golang ftp implementation

golang ftp implementation

PHPz
PHPzOriginal
2023-05-19 11:30:071122browse

Golang (also known as Go language) is an open source programming language that makes programming simple, efficient and fast. It is a strongly typed language that can write low-level code like C language or high-level language code like Python. Golang uses parallel programming and coroutine technology extensively and can run efficiently on multi-core CPUs.

FTP (File Transfer Protocol) is a file transfer protocol and a standard protocol widely used on the Internet to transfer files, such as downloading, uploading, backup and other operations. It is very simple to implement the FTP function in Golang. You only need to use the net/http package in the standard library.

Before you start writing an FTP program, you need to configure an FTP server. You can use free FTP server software such as FileZilla Server. In FileZilla Server, you need to create a new user account and authorize access to an FTP directory to store uploaded files. Then you can start writing Golang's FTP program.

First, you need to create a client program to implement file upload and download. The following is the code for a simple Golang FTP client program:

package main

import (
    "fmt"
    "log"
    "net/http"
    "os"
)

func main() {
    // 设置FTP服务器地址和端口
    ftpURL := "ftp://example.com:21"

    // 打开文件
    file, err := os.Open("myfile.txt")
    if err != nil {
        log.Fatal(err)
    }
    defer file.Close()

    // 创建HTTP客户端
    client := &http.Client{}

    // 创建请求,使用PUT方法上传文件到FTP服务器
    req, err := http.NewRequest(http.MethodPut, ftpURL+"/myfile.txt", file)
    if err != nil {
        log.Fatal(err)
    }

    // 设置授权信息
    req.SetBasicAuth("username", "password")

    // 发送请求
    resp, err := client.Do(req)
    if err != nil {
        log.Fatal(err)
    }
    defer resp.Body.Close()

    // 打印响应码和响应内容
    fmt.Println(resp.StatusCode)
    fmt.Println(resp.Status)
}

In the above code, you first need to set the address and port of the FTP server to "ftp://example.com:21". Then, open the uploaded file through the os.Open() function (the myfile.txt file is used here). Next, create a new HTTP request through the http.NewRequest() function, set the request method to PUT, and pass the uploaded file object as a parameter to the request. Next, call the req.SetBasicAuth() function to set the username and password of the FTP server.

Finally, send an HTTP request and obtain the response result, and print the response status code and status information through resp.StatusCode and resp.Status.

In addition to uploading files, you can also use similar code to download files. You only need to change the request method to GET and the file path to the path of the downloaded file. The following is a sample code for downloading a file:

package main

import (
    "fmt"
    "io"
    "log"
    "net/http"
    "os"
)

func main() {
    // 设置FTP服务器地址和端口
    ftpURL := "ftp://example.com:21"

    // 打开文件
    file, err := os.Create("myfile.txt")
    if err != nil {
        log.Fatal(err)
    }
    defer file.Close()

    // 创建HTTP客户端
    client := &http.Client{}

    // 创建请求,使用GET方法下载文件
    req, err := http.NewRequest(http.MethodGet, ftpURL+"/myfile.txt", nil)
    if err != nil {
        log.Fatal(err)
    }

    // 设置授权信息
    req.SetBasicAuth("username", "password")

    // 发送请求
    resp, err := client.Do(req)
    if err != nil {
        log.Fatal(err)
    }
    defer resp.Body.Close()

    // 将响应内容拷贝到本地文件
    _, err = io.Copy(file, resp.Body)
    if err != nil {
        log.Fatal(err)
    }

    // 打印响应码和响应内容
    fmt.Println(resp.StatusCode)
    fmt.Println(resp.Status)
}

In the above code, a new local file is created through the os.Create() function (the myfile.txt file is created here). Then, create a new HTTP request through the http.NewRequest() function, set the request method to GET, and change the file path to the file path to be downloaded. Next, call the req.SetBasicAuth() function to set the username and password of the FTP server.

Then, send an HTTP request and obtain the response result, and copy the response content to a local file through the io.Copy() function. Finally, the response status code and status information are printed through resp.StatusCode and resp.Status.

The above is a simple sample code to implement the Golang FTP client. By using the net/http package, Golang can easily implement FTP file upload and download functions. Whether it is cross-platform or performance, the Go language has huge advantages. We believe that the future of the Go language is very bright!

The above is the detailed content of golang ftp implementation. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Previous article:golang forwarding serviceNext article:golang forwarding service