@@ -2,6 +2,7 @@ package binder
2
2
3
3
import (
4
4
"bytes"
5
+ "io"
5
6
"mime/multipart"
6
7
"testing"
7
8
@@ -98,10 +99,12 @@ func Test_FormBinder_BindMultipart(t *testing.T) {
98
99
}
99
100
100
101
type User struct {
101
- Name string `form:"name"`
102
- Names []string `form:"names"`
103
- Posts []Post `form:"posts"`
104
- Age int `form:"age"`
102
+ Avatar * multipart.FileHeader `form:"avatar"`
103
+ Name string `form:"name"`
104
+ Names []string `form:"names"`
105
+ Posts []Post `form:"posts"`
106
+ Avatars []* multipart.FileHeader `form:"avatars"`
107
+ Age int `form:"age"`
105
108
}
106
109
var user User
107
110
@@ -118,6 +121,24 @@ func Test_FormBinder_BindMultipart(t *testing.T) {
118
121
require .NoError (t , mw .WriteField ("posts[1][title]" , "post2" ))
119
122
require .NoError (t , mw .WriteField ("posts[2][title]" , "post3" ))
120
123
124
+ writer , err := mw .CreateFormFile ("avatar" , "avatar.txt" )
125
+ require .NoError (t , err )
126
+
127
+ _ , err = writer .Write ([]byte ("avatar" ))
128
+ require .NoError (t , err )
129
+
130
+ writer , err = mw .CreateFormFile ("avatars" , "avatar1.txt" )
131
+ require .NoError (t , err )
132
+
133
+ _ , err = writer .Write ([]byte ("avatar1" ))
134
+ require .NoError (t , err )
135
+
136
+ writer , err = mw .CreateFormFile ("avatars" , "avatar2.txt" )
137
+ require .NoError (t , err )
138
+
139
+ _ , err = writer .Write ([]byte ("avatar2" ))
140
+ require .NoError (t , err )
141
+
121
142
require .NoError (t , mw .Close ())
122
143
123
144
req .Header .SetContentType (mw .FormDataContentType ())
@@ -127,7 +148,7 @@ func Test_FormBinder_BindMultipart(t *testing.T) {
127
148
fasthttp .ReleaseRequest (req )
128
149
})
129
150
130
- err : = b .Bind (req , & user )
151
+ err = b .Bind (req , & user )
131
152
132
153
require .NoError (t , err )
133
154
require .Equal (t , "john" , user .Name )
@@ -139,6 +160,38 @@ func Test_FormBinder_BindMultipart(t *testing.T) {
139
160
require .Equal (t , "post1" , user .Posts [0 ].Title )
140
161
require .Equal (t , "post2" , user .Posts [1 ].Title )
141
162
require .Equal (t , "post3" , user .Posts [2 ].Title )
163
+
164
+ require .NotNil (t , user .Avatar )
165
+ require .Equal (t , "avatar.txt" , user .Avatar .Filename )
166
+ require .Equal (t , "application/octet-stream" , user .Avatar .Header .Get ("Content-Type" ))
167
+
168
+ file , err := user .Avatar .Open ()
169
+ require .NoError (t , err )
170
+
171
+ content , err := io .ReadAll (file )
172
+ require .NoError (t , err )
173
+ require .Equal (t , "avatar" , string (content ))
174
+
175
+ require .Len (t , user .Avatars , 2 )
176
+ require .Equal (t , "avatar1.txt" , user .Avatars [0 ].Filename )
177
+ require .Equal (t , "application/octet-stream" , user .Avatars [0 ].Header .Get ("Content-Type" ))
178
+
179
+ file , err = user .Avatars [0 ].Open ()
180
+ require .NoError (t , err )
181
+
182
+ content , err = io .ReadAll (file )
183
+ require .NoError (t , err )
184
+ require .Equal (t , "avatar1" , string (content ))
185
+
186
+ require .Equal (t , "avatar2.txt" , user .Avatars [1 ].Filename )
187
+ require .Equal (t , "application/octet-stream" , user .Avatars [1 ].Header .Get ("Content-Type" ))
188
+
189
+ file , err = user .Avatars [1 ].Open ()
190
+ require .NoError (t , err )
191
+
192
+ content , err = io .ReadAll (file )
193
+ require .NoError (t , err )
194
+ require .Equal (t , "avatar2" , string (content ))
142
195
}
143
196
144
197
func Benchmark_FormBinder_BindMultipart (b * testing.B ) {
0 commit comments