Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk memuat naik fail besar dalam ketulan menggunakan Golang?

Bagaimana untuk memuat naik fail besar dalam ketulan menggunakan Golang?

WBOY
WBOYasal
2024-06-02 14:49:56563semak imbas

Laksanakan muat naik berbilang bahagian bagi fail besar di Golang: gunakan pakej mime/berbilang bahagian untuk membuat permintaan muat naik berbilang bahagian. Tetapkan Jenis Kandungan kepada berbilang bahagian/data-bentuk. Gunakan klien HTTP untuk menghantar permintaan. Baca respons pelayan dan proses hasilnya.

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

Cara memuat naik fail besar dalam ketulan di Golang

Apabila memuat naik fail besar, muat naik terus keseluruhan fail ke pelayan biasanya menghadapi pelbagai masalah seperti tamat masa, memori tidak mencukupi dan gangguan rangkaian. Oleh itu, muat naik chunked adalah penyelesaian yang lebih cekap dan boleh dipercayai.

Di Golang, anda boleh menggunakan pakej [mime/multipart](https://pkg.go.dev/mime/multipart) untuk memuat naik fail dalam ketulan dengan mudah. Pakej ini menyediakan jenis [Penulis](https://pkg.go.dev/mime/multipart#Writer), membolehkan kami membuat permintaan muat naik berbilang bahagian: 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

🎜Kes praktikal: 🎜🎜 🎜Andaikan kita mempunyai fail besar bernama large-file.txt yang perlu dimuat naik ke laluan /upload pada pelayan. Kami boleh menjalankan program Golang berikut untuk memuat naik: 🎜rrreee🎜 Program ini akan memuat naik fail large-file.txt dalam ketulan dan mencetak respons pelayan. 🎜

Atas ialah kandungan terperinci Bagaimana untuk memuat naik fail besar dalam ketulan menggunakan Golang?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn