在 Golang 中实现大型文件分块上传:使用 mime/multipart 包创建分块上传请求。设置 Content-Type 为 multipart/form-data。使用 HTTP 客户端发送请求。读取服务器响应并处理结果。
如何在 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
}
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 程序进行上传:
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!