Home > Backend Development > Golang > How to golang gin

How to golang gin

PHPz
Release: 2023-05-19 11:02:07
Original
549 people have browsed it

Implementing file upload and download

Gin is a Web development framework developed using Go language. It has the characteristics of high efficiency, ease of use and flexibility. For file uploading and downloading, these functions can be easily implemented using the Gin framework. This article will introduce how to use the Gin framework to upload and download files.

1. File upload

In the Gin framework, file upload requires the use of the MultipartForm form. First, you need to define routing and processing functions:

router.POST("/upload", uploadHandler)

func uploadHandler(c *gin.Context) {

file, err := c.FormFile("file")
if err != nil {
    c.JSON(http.StatusBadRequest, gin.H{
        "error": err.Error(),
    })
    return
}

filename := filepath.Base(file.Filename)
if err := c.SaveUploadedFile(file, filename); err != nil {
    c.JSON(http.StatusBadRequest, gin.H{
        "error": err.Error(),
    })
    return
}

c.JSON(http.StatusOK, gin.H{
    "message": fmt.Sprintf("'%s' uploaded!", filename),
})
Copy after login

}

In the processing function for uploading files, first obtain the uploaded file through the c.FormFile() function and perform error handling. Then get the file name and use the c.SaveUploadedFile() function to save the file to the specified directory. Finally, the upload results are returned via JSON.

Start the Gin service and visit http://localhost:8080/upload. You will see the following interface:

https://user-images.githubusercontent.com/36320997/129822689- f45e849c-7cae-4ad9-9107-aae98f76d34c.png

After the file is uploaded successfully, you will see the following JSON return result:

{

"message": "'test.txt' uploaded!"
Copy after login

}

2. File download

File downloading requires the static file service of the Gin framework. This can be achieved through the following operations:

1. Create any directory in the application to save downloaded files.

2. In Gin routing, define access to files in this directory, as follows:

router.StaticFS("/download", http.Dir("tmp"))

3. In the routing processing function, define the download interface based on the file name, as follows:

router.GET("/download/:filename", downloadHandler)

func downloadHandler(c *gin.Context) {

filename := c.Param("filename")
file := "./tmp/" + filename // 通过配置文件获取下载目录地址,如: "./tmp/" + filename

fi, err := os.Stat(file)
if err != nil {
    c.JSON(http.StatusBadRequest, gin.H{
        "error": err.Error(),
    })
    return
}

c.Writer.Header().Set("Content-Disposition", fmt.Sprintf("attachment; filename=%s", fi.Name()))
c.Writer.Header().Set("Content-Type", "application/octet-stream")
c.File(file)
Copy after login

}

In the file download processing function, you need to obtain the file name through c.Param(), determine whether the file exists, and set the download HTTP response header. Finally, the file is written into the response to implement the file download function.

Start the Gin service and visit the following link http://localhost:8080/download/test.txt to download the test.txt file.

3. Summary

The file upload and download functions are implemented through the Gin framework, which is elegant and concise. The above code is only the basic implementation. In actual use, you also need to consider the location and method of file storage, as well as subsequent file operations, etc. Readers can improve it based on their own actual conditions.

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

source:php.cn
Statement of this Website
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
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template