Maison > développement back-end > Golang > Comment télécharger des fichiers volumineux en morceaux à l'aide de Golang ?

Comment télécharger des fichiers volumineux en morceaux à l'aide de Golang ?

WBOY
Libérer: 2024-06-02 14:49:56
original
601 Les gens l'ont consulté

在 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) 类型,允许我们创建分块上传请求:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

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))

}

Copier après la connexion

实战案例:

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

1

go run main.go

Copier après la connexion

该程序将以分块的形式上传 large-file.txt 文件,并打印服务器响应。

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal