Upload
This article will introduce how to upload.
On this page
Multipart Upload
Use SetFile
or SetFiles
to add file into multipart form:
client := req.C()
client.R().
SetFile("pic", "test.jpg"). // Set form param name and filename
SetFile("pic", "/path/to/roc.png"). // Multiple files using the same form param name
SetFiles(map[string]string{ // Set multiple files using map
"exe": "test.exe",
"src": "main.go",
}).
SetFormData(map[string]string{ // Set form data while uploading
"name": "imroc",
"email": "[email protected]",
}).
Post("https://httpbin.org/post")
You can also use SetFileBytes
to add []byte
as file content:
client.R().
SetFileBytes("file", "test.txt", []byte("test content")).
Post(url)
Or use SetFileReader
to add io.Reader
as file content to upload:
avatarImgFile, _ := os.Open("avatar.png")
client.R().
SetFileReader("avatar", "avatar.png", avatarImgFile).
Post(url)
Use Upload Callback
Use SetUploadCallback
if you want to show upload progress:
client := req.C()
client.R().
SetFile("excel", "test.xlsx").
SetUploadCallback(func(info req.UploadInfo) {
fmt.Printf("%q uploaded %.2f%%\n", info.FileName, float64(info.UploadedSize)/float64(info.FileSize)*100.0)
}).Post("https://httpbin.org/post")
"test.xlsx" uploaded 7.44%
"test.xlsx" uploaded 29.78%
"test.xlsx" uploaded 52.08%
"test.xlsx" uploaded 74.47%
"test.xlsx" uploaded 96.87%
"test.xlsx" uploaded 100.00%
When the upload callback is set, will force using chunked encoding, which is equivalent to calling
EnableForceChunkedEncoding
.
UploadCallback
will be invoked at least every 200ms by default, you can customize the minimal invoke interval using SetUploadCallbackWithInterval
:
client := req.C()
client.R().
SetFile("excel", "test.xlsx").
SetUploadCallbackWithInterval(func(info req.UploadInfo) {
fmt.Printf("%q uploaded %.2f%%\n", info.FileName, float64(info.UploadedSize)/float64(info.FileSize)*100.0)
}, 10 * time.Millisecond).
Post("https://httpbin.org/post")