ホームページ バックエンド開発 Golang Golang を使用して HTTP ファイルのダウンロードを処理するにはどうすればよいですか?

Golang を使用して HTTP ファイルのダウンロードを処理するにはどうすればよいですか?

Jun 01, 2024 pm 10:24 PM
http golang

Golang は、HTTP ファイルのダウンロードを処理する 2 つの方法を提供します。net/http ライブラリを使用すると、http.FileServer() メソッドを通じてファイル リクエストを処理できます。サードパーティ ライブラリ github.com/CloudyKit/jet を使用すると、ダウンロードの一時停止や再開などの高度な機能が提供され、jet.Get() メソッドを使用してファイルのダウンロードを処理できます。

如何使用 Golang 处理 HTTP 文件下载?

Golang を使用して HTTP ファイルのダウンロードを処理する方法

はじめに

HTTP ファイルのダウンロードを処理することは、Web 開発における一般的なタスクです。 Golang には、これを実現するためのいくつかの方法が用意されています。この記事では、net/http ライブラリとサードパーティ ライブラリ github.com/CloudyKit/jet を使用して HTTP ファイルのダウンロードを処理する 2 つの方法を紹介します。 net/http 库和第三方库 github.com/CloudyKit/jet 处理 HTTP 文件下载的两种方法。

使用 net/http

要使用 net/http 库处理文件下载,可以使用 http.FileServer() 方法。此方法接受一个文件系统指针作为参数,并将其用于处理文件请求。

import (
    "log"
    "net/http"
)

func main() {
    fs := http.FileServer(http.Dir("./files"))
    http.Handle("/files/", http.StripPrefix("/files", fs))
    log.Fatal(http.ListenAndServe(":8080", nil))
}
ログイン後にコピー

在这种方法中,/files URL 前缀下的所有请求将由 http.FileServer() 处理。

使用 github.com/CloudyKit/jet

github.com/CloudyKit/jet 是一个用于处理文件下载的第三方库。它提供了更高级别的特性,例如暂停和恢复下载。

import (
    "log"
    "net/http"

    "github.com/CloudyKit/jet/v6"
)

func main() {
    engine := jet.NewEngine()
    http.Handle("/", engine)
    log.Fatal(http.ListenAndServe(":8080", nil))
}
ログイン後にコピー

jet 中,可以使用 jet.Get() 方法处理文件下载。要指定文件,请使用 filepath.Abs() 函数获取文件的绝对路径。

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

    "github.com/CloudyKit/jet/v6"
)

func main() {
    engine := jet.NewEngine()
    engine.Get("/", func(c *jet.Context) error {
        filePath, err := filepath.Abs("file.txt")
        if err != nil {
            return err
        }
        f, err := os.Open(filePath)
        if err != nil {
            return err
        }
        defer f.Close()
        return engine.ServeContent(c.ResponseWriter(), c.Request(), "file.txt", time.Now(), f)
    })
    log.Fatal(http.ListenAndServe(":8080", engine))
}
ログイン後にコピー

实战案例

想象一个在线文件存储平台。用户可以上传文件并访问已上传的文件。使用 github.com/CloudyKit/jet 库,可以轻松地实现文件下载功能。

package main

import (
    "log"
    "net/http"

    "github.com/CloudyKit/jet/v6"
)

type fileStore struct {
    files map[string][]byte
}

func main() {
    fs := &fileStore{files: make(map[string][]byte)}
    engine := jet.NewEngine()
    engine.Get("/", func(c *jet.Context) error {
        // 返回可用文件列表
    })
    engine.Post("/", func(c *jet.Context) error {
        // 将文件保存到文件存储中
    })
    engine.Get("/download/:file", func(c *jet.Context) error {
        file := c.Params["file"]
        data, ok := fs.files[file]
        if !ok {
            return http.StatusNotFound
        }
        return engine.ServeContent(c.ResponseWriter(), c.Request(), file, time.Now(), data)
    })
    log.Fatal(http.ListenAndServe(":8080", engine))
}
ログイン後にコピー

在本例中,fileStore 结构用于存储上传的文件。文件下载处理程序(engine.Get("/download/:file")

🎜net/http ライブラリを使用します🎜🎜🎜 net/http ライブラリを使用してファイルのダウンロードを処理するには、http.FileServer() メソッド。このメソッドはファイル システム ポインターをパラメーターとして受け取り、それを使用してファイル要求を処理します。 🎜rrreee🎜 このアプローチでは、/files URL プレフィックスの下にあるすべてのリクエストは http.FileServer() によって処理されます。 🎜🎜🎜github.com/CloudyKit/jet ライブラリの使用🎜🎜🎜github.com/CloudyKit/jet は、ファイルのダウンロードを処理するためのサードパーティ ライブラリです。ダウンロードの一時停止や再開などの高レベルの機能を提供します。 🎜rrreee🎜 jet では、jet.Get() メソッドを使用してファイルのダウンロードを処理できます。ファイルを指定するには、filepath.Abs​​() 関数を使用してファイルへの絶対パスを取得します。 🎜rrreee🎜🎜実際的なケース🎜🎜🎜 オンライン ファイル ストレージ プラットフォームを想像してみてください。ユーザーはファイルをアップロードし、アップロードされたファイルにアクセスできます。 github.com/CloudyKit/jet ライブラリを使用すると、ファイルのダウンロード機能を簡単に実装できます。 🎜rrreee🎜 この例では、アップロードされたファイルを保存するために fileStore 構造が使用されます。ファイル ダウンロード ハンドラー (engine.Get("/download/:file")) は、要求されたファイルをファイル ストアから取得し、クライアントに提供します。 🎜

以上がGolang を使用して HTTP ファイルのダウンロードを処理するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットな記事タグ

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Golang データベース接続用の接続プールを構成するにはどうすればよいですか? Golang データベース接続用の接続プールを構成するにはどうすればよいですか? Jun 06, 2024 am 11:21 AM

Golang データベース接続用の接続プールを構成するにはどうすればよいですか?

Golang を使用してファイルを安全に読み書きするにはどうすればよいですか? Golang を使用してファイルを安全に読み書きするにはどうすればよいですか? Jun 06, 2024 pm 05:14 PM

Golang を使用してファイルを安全に読み書きするにはどうすればよいですか?

Golang と C++ の類似点と相違点 Golang と C++ の類似点と相違点 Jun 05, 2024 pm 06:12 PM

Golang と C++ の類似点と相違点

Golang フレームワーク アーキテクチャの学習曲線はどれくらい急ですか? Golang フレームワーク アーキテクチャの学習曲線はどれくらい急ですか? Jun 05, 2024 pm 06:59 PM

Golang フレームワーク アーキテクチャの学習曲線はどれくらい急ですか?

Golangでリストからランダムな要素を生成するにはどうすればよいですか? Golangでリストからランダムな要素を生成するにはどうすればよいですか? Jun 05, 2024 pm 04:28 PM

Golangでリストからランダムな要素を生成するにはどうすればよいですか?

golangフレームワークの長所と短所の比較 golangフレームワークの長所と短所の比較 Jun 05, 2024 pm 09:32 PM

golangフレームワークの長所と短所の比較

Golang フレームワークでのエラー処理のベスト プラクティスは何ですか? Golang フレームワークでのエラー処理のベスト プラクティスは何ですか? Jun 05, 2024 pm 10:39 PM

Golang フレームワークでのエラー処理のベスト プラクティスは何ですか?

golang フレームワーク ドキュメントの使用手順 golang フレームワーク ドキュメントの使用手順 Jun 05, 2024 pm 06:04 PM

golang フレームワーク ドキュメントの使用手順

See all articles