Golang を使用して大きなファイルを分割してアップロードするにはどうすればよいですか?

WBOY
リリース: 2024-06-02 14:49:56
オリジナル
548 人が閲覧しました

Golang で大きなファイルのマルチパート アップロードを実装します。mime/multipart パッケージを使用してマルチパート アップロード リクエストを作成します。 Content-Type を multipart/form-data に設定します。 HTTP クライアントを使用してリクエストを送信します。サーバーの応答を読み取り、結果を処理します。

如何使用 Golang 进行大型文件分块上传?

Golangで大きなファイルを分割してアップロードする方法

大きなファイルをアップロードする場合、ファイル全体をサーバーに直接アップロードすると、通常、タイムアウト、メモリ不足、ネットワークの中断などのさまざまな問題が発生します。したがって、チャンクアップロードはより効率的で信頼性の高いソリューションです。

Golang では、[mime/multipart](https://pkg.go.dev/mime/multipart) パッケージを使用して、ファイルをチャンクで簡単にアップロードできます。このパッケージは [Writer](https://pkg.go.dev/mime/multipart#Writer) タイプを提供し、マルチパート アップロード リクエストを作成できるようにします: mime/multipart](https://pkg.go.dev/mime/multipart) 包轻松实现文件的分块上传。该包提供了 [Writer](https://pkg.go.dev/mime/multipart#Writer) 类型,允许我们创建分块上传请求:

package main

import (
    "bytes"
    "fmt"
    "io"
    "io/ioutil"
    "mime/multipart"
    "net/http"
    "os"
)

func main() {
    // 将文件内容读入内存
    fileBytes, err := ioutil.ReadFile("large-file.txt")
    if err != nil {
        fmt.Println("Error reading file: ", err)
        return
    }

    // 创建分块上传请求
    req, err := http.NewRequest("POST", "http://example.com/upload", bytes.NewReader(fileBytes))
    if err != nil {
        fmt.Println("Error creating request: ", err)
        return
    }

    // 设置分块上传 Content-Type
    req.Header.Set("Content-Type", multipart.NewWriter().FormDataContentType())

    client := &http.Client{}
    res, err := client.Do(req)
    if err != nil {
        fmt.Println("Error uploading file: ", err)
        return
    }

    if res.StatusCode != http.StatusOK {
        fmt.Println("Error uploading file: ", res.Status)
        return
    }

    // 读取服务器响应
    bodyBytes, err := ioutil.ReadAll(res.Body)
    if err != nil {
        fmt.Println("Error reading response: ", err)
        return
    }

    fmt.Println("File uploaded successfully:", string(bodyBytes))
}
ログイン後にコピー

实战案例:

假设我们有一个名为 large-file.txt 的大文件,需要上传到服务器上的 /upload 路径。我们可以运行以下 Golang 程序进行上传:

go run main.go
ログイン後にコピー

该程序将以分块的形式上传 large-file.txtrrreee

🎜 実際のケース: 🎜🎜 🎜サーバー上の /upload パスにアップロードする必要がある large-file.txt という名前の大きなファイルがあるとします。次の Golang プログラムを実行してアップロードできます: 🎜rrreee🎜 このプログラムは、large-file.txt ファイルをチャンクでアップロードし、サーバーの応答を出力します。 🎜

以上がGolang を使用して大きなファイルを分割してアップロードするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!