> For the complete documentation index, see [llms.txt](https://rafli-ramadhan.gitbook.io/golang-example-code-by-topic/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://rafli-ramadhan.gitbook.io/golang-example-code-by-topic/golang/go-gin-framework/download-file.md).

# Download File

Untuk download file otomatis saat hit suatu endpoint, bisa menggunakan ctx.Header("content-disposition", ...) dan ctx.File() untuk menampilkan file saat endpoint di hit di browser. Tanpa header tersebut, file hanya akan ditampilkan saja dan tidak terdownload. Content-disposition adalah tipe header untuk menunjukkan bagaimana response diproses. Content-disposition di set attachment yang akan membuat browser men-dowload file otomatis. Contoh *code* seperti di bawah ini.

```go
package main

import (
	"fmt"
	"net/http"

	"github.com/gin-gonic/gin"
)

func main() {
	r := gin.Default()
	r.GET("/download", Download)
	r.Run(":5000")
}

func Download(ctx *gin.Context) {
	filename, _ := ctx.GetQuery("file")
	if filename == "" {
		ctx.String(http.StatusBadRequest, "invalid requested file")
	}

	ctx.Header("content-disposition", "attachment;filename=\""+filename+"\"")
	ctx.File(fmt.Sprintf("./files/%s", filename))

	ctx.String(http.StatusOK, "Downloaded")
}
```

<figure><img src="https://1578455751-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F09pucuEBc5BTaaur3uoo%2Fuploads%2Fi5oHCwMPT93ROGhmlPLx%2Fdownload.png?alt=media&amp;token=b5b05285-93a1-4005-b446-4905abf34367" alt=""><figcaption></figcaption></figure>

Reference :

{% embed url="<https://www.geeksforgeeks.org/http-headers-content-disposition/>" %}
