ファイルからのデータ配信
Ginはクライアントにファイルを配信するためのいくつかのメソッドを提供しています。各メソッドは異なるユースケースに適しています:
c.File(path)— ローカルファイルシステムからファイルを配信します。コンテンツタイプは自動検出されます。コンパイル時にファイルパスが分かっている場合や、すでにバリデーション済みの場合に使用します。c.FileFromFS(path, fs)—http.FileSystemインターフェースからファイルを配信します。埋め込みファイルシステム(embed.FS)、カスタムストレージバックエンド、または特定のディレクトリツリーへのアクセスを制限したい場合に便利です。c.FileAttachment(path, filename)—Content-Disposition: attachmentヘッダーを設定してダウンロードとしてファイルを配信します。ブラウザはディスク上の元のファイル名に関係なく、指定したファイル名でファイルの保存を促します。
package main
import ( "net/http"
"github.com/gin-gonic/gin")
func main() { router := gin.Default()
// ファイルをインラインで配信(ブラウザに表示) router.GET("/local/file", func(c *gin.Context) { c.File("local/file.go") })
// http.FileSystemからファイルを配信 var fs http.FileSystem = http.Dir("/var/www/assets") router.GET("/fs/file", func(c *gin.Context) { c.FileFromFS("fs/file.go", fs) })
// カスタムファイル名でダウンロード可能な添付ファイルとして配信 router.GET("/download", func(c *gin.Context) { c.FileAttachment("local/report-2024-q1.xlsx", "quarterly-report.xlsx") })
router.Run(":8080")}curlでダウンロードエンドポイントをテストできます:
# -vフラグでContent-Dispositionヘッダーを表示curl -v http://localhost:8080/download --output report.xlsx
# ファイルをインラインで配信curl http://localhost:8080/local/fileio.Readerからのデータストリーミング(リモートURLや動的に生成されるコンテンツなど)については、代わりにc.DataFromReader()を使用してください。詳細はリーダーからのデータ配信をご覧ください。