Home  >  Article  >  Backend Development  >  How to upload large files in chunks using Golang?

How to upload large files in chunks using Golang?

WBOY
WBOYOriginal
2024-06-02 14:49:56551browse

Implement multipart upload of large files in Golang: use the mime/multipart package to create a multipart upload request. Set Content-Type to multipart/form-data. Use an HTTP client to send the request. Read the server response and process the results.

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

How to upload large files in chunks in Golang

When uploading large files, upload the entire file directly to the server usually Various issues can be encountered, such as timeouts, out of memory, and network outages. Therefore, chunked upload is a more efficient and reliable solution.

In Golang, you can use the [mime/multipart](https://pkg.go.dev/mime/multipart) package to easily upload files in chunks. This package provides the [Writer](https://pkg.go.dev/mime/multipart#Writer) type, allowing us to create multipart upload requests:

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

Practical case:

Suppose we have a large file named large-file.txt that needs to be uploaded to the /upload path on the server. We can run the following Golang program to upload:

go run main.go

This program will upload the large-file.txt file in chunks and print the server response.

The above is the detailed content of How to upload large files in chunks using Golang?. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn