Go 言語で HTTP サーバー機能を使用して静的ファイルをダウンロードするにはどうすればよいですか?
Web アプリケーションを開発する場合、PDF ファイル、画像、ビデオなどの特定のリソース ファイルをダウンロードできる機能をユーザーに提供するなど、ファイル ダウンロード機能を実装する必要がある場合があります。 Go 言語の net/http パッケージは、HTTP サーバー機能を実装する簡単な方法を提供し、ファイルをダウンロードする機能を提供します。
以下の例を使用して、Go 言語の HTTP サーバー関数を使用して静的ファイルをダウンロードする方法を示します。
最初に、必要なパッケージをインポートする必要があります:
package main import ( "io/ioutil" "net/http" "os" )
次に、ユーザー要求を処理してファイルの内容を返す処理関数を定義する必要があります。http.ServeContent
関数を使用して、ファイルのコンテンツを読み取り、送信できます。
func downloadHandler(w http.ResponseWriter, r *http.Request) { filePath := "./files/sample.txt" file, err := os.Open(filePath) if err != nil { http.Error(w, "File not found.", http.StatusNotFound) return } defer file.Close() fileInfo, err := file.Stat() if err != nil { http.Error(w, "File stat error.", http.StatusInternalServerError) return } http.ServeContent(w, r, fileInfo.Name(), fileInfo.ModTime(), file) }
上記のコードでは、downloadHandler
関数は 2 つのパラメーターを受け取ります:w http.ResponseWriter
とr *http.Request
クライアントに応答を返し、クライアントの要求情報を受信します。
この関数では、まずos.Open
関数でファイルを開き、エラーが発生するかどうかを確認し、エラーが発生した場合には、クライアントにステータス コード 404 を返します。
次に、file.Stat
関数を使用して、ファイル名や変更時刻などのファイル情報を取得します。
最後に、http.ServeContent
関数を通じてファイルのコンテンツをクライアントに送信します。この関数は、ResponseWriter
、Request
、ファイル名、ファイル変更時刻、ファイルの内容をパラメータとして受け取り、ファイルの内容の読み取りと送信を完了します。
最後に、HTTP サーバーにダウンロード処理関数を登録し、指定されたポートをリッスンする必要があります。
func main() { http.HandleFunc("/download", downloadHandler) http.ListenAndServe(":8080", nil) }
上記のコードでは、http.HandleFunc
関数を使用して、HTTP サーバーの処理関数としてdownloadHandler
関数を登録しています。この関数は、パスと処理関数の 2 つのパラメータを受け取ります。
最後に、http.ListenAndServe
関数を使用して、指定されたポートをリッスンします。この関数は、リッスン アドレスとプロセッサという 2 つのパラメーターを受け取ります。
最後に、コマンドgo run main.go
を使用してプログラムをローカルで実行し、ブラウザでhttp://localhost:8080/download
にアクセスします。sample.txt
ファイルをダウンロードできます。
この記事の例では、Go 言語の HTTP サーバー関数を使用して静的ファイルをダウンロードする方法を示します。http.ServeContent
関数によるファイルの読み取りと送信が完了し、ユーザーが必要なリソース ファイルを簡単にダウンロードできるようになりました。同時に、ダウンロード処理機能を HTTP サーバーに登録し、指定したポートをリッスンすることで、完全なダウンロード機能を実現する方法も示しました。この記事がお役に立てば幸いです。
以上がGo言語のHTTPサーバー機能を使って静的ファイルをダウンロードするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。