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

Bagaimana untuk memuat naik fail besar dalam ketulan menggunakan Golang?

WBOY
Lepaskan: 2024-06-02 14:49:56
asal
603 orang telah melayarinya

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))
}
Salin selepas log masuk

实战案例:

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

go run main.go
Salin selepas log masuk

该程序将以分块的形式上传 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!

Label berkaitan:
sumber:php.cn
Kenyataan Laman Web ini
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan