|
|
51897b6e90
|
feat(ghttp): 支持文件上传字段的嵌套结构解析
当前问题,使用嵌套字段时无法自动绑定到嵌套字段的文件 【已解决】
```
type TestData struct {
ID int64 `json:"id" dc:"ID"`
Name string `json:"name" dc:"Name"`
File *ghttp.UploadFile `json:"file" dc:"File" type:"file"`
Files *ghttp.UploadFiles `json:"files" dc:"Files" type:"file"`
}
type TestReq struct {
g.Meta `path:"/v1/admin/user/test" tags:"AdminUser" method:"POST" summary:"Test"`
ID int64 `json:"id" dc:"ID"`
Data TestData `json:"data" dc:"Data"`
File *ghttp.UploadFile `json:"file" dc:"File" type:"file"`
}
```
使用 multipart/form-data 上传时
```
------WebKitFormBoundarypwjjDUNvfZkxxlhH
Content-Disposition: form-data; name="data[id]"
11111111111111112
------WebKitFormBoundarypwjjDUNvfZkxxlhH
Content-Disposition: form-data; name="data[name]"
11111111111111112
------WebKitFormBoundarypwjjDUNvfZkxxlhH
Content-Disposition: form-data; name="data[description]"
11111111111111112
------WebKitFormBoundarypwjjDUNvfZkxxlhH
Content-Disposition: form-data; name="data[file]"; filename="xxxx.jpg"
Content-Type: image/jpeg
------WebKitFormBoundarypwjjDUNvfZkxxlhH
Content-Disposition: form-data; name="file"; filename="xxxxxr.jpg"
Content-Type: image/jpeg
------WebKitFormBoundarypwjjDUNvfZkxxlhH
Content-Disposition: form-data; name="data[files][]"; filename="debug.skk.moe_1732736392647.png"
Content-Type: image/png
------WebKitFormBoundarypwjjDUNvfZkxxlhH
Content-Disposition: form-data; name="data[files][]"; filename="85ee46523adb6a8ee4bf95795c91bef28e24983ed38afbec6789fb5077d75e3f.jpg"
Content-Type: image/jpeg
------WebKitFormBoundarypwjjDUNvfZkxxlhH
Content-Disposition: form-data; name="id"
1000
------WebKitFormBoundarypwjjDUNvfZkxxlhH--
```
【问题描述】
之前使用:
```
var (
request = g.RequestFromCtx(ctx)
)
var data = request.GetRequestMap()
```
获得的结果是扁平化的:
```
{
"data": {
"description": "11111111111111112",
"id": "11111111111111112",
"name": "11111111111111112"
},
"data[file]": {
"Filename": "xxxxx.jpg",
},
"data[files][]": [
{
"Filename": "xxx.png",
},
{
"Filename": "xxx.jpg",
}
],
"file": {
"Filename": "xxxx.jpg",
"Size": 5252553
},
"id": "1000"
}
```
由于没有将 `map["data[file]"]` 以 `map["data"]["file"]` 的形式存储,导致最终进行 `r.Parse` 时无法将文件正确绑定到结构体字段:
```
File *ghttp.UploadFile `json:"file" dc:"File" type:"file"`
Files *ghttp.UploadFiles `json:"files" dc:"Files" type:"file"`
```
这些字段无论如何都是 nil。
【解决方案】
现在已修复此问题,通过解析嵌套的字段名并构建正确的嵌套Map结构。修复后,`GetRequestMap()` 返回的结果如下:
```
{
"data": {
"description": "11111111111111112",
"id": "11111111111111112",
"name": "11111111111111112",
"file": {
"Filename": "xxxxx.jpg",
},
"files[]": [
{
"Filename": "xxx.png",
},
{
"Filename": "xxx.jpg",
}
]
},
"file": {
"Filename": "xxxx.jpg",
"Size": 5252553
},
"id": "1000"
}
```
这样,嵌套结构中的文件字段现在可以正确绑定到相应的结构体字段了。这一修复实现了对表单中嵌套文件字段的完整支持。
|
2025-04-07 17:53:27 +08:00 |
|
|
|
bcda48bf82
|
fix(net/ghttp):check parameter existence to determine using default or front-end value. (#4182)
|
2025-03-08 20:56:27 +08:00 |
|
|
|
f9c7eae23b
|
fix(net/ghttp): remove unused code snippet (#4131)
|
2025-01-22 19:22:02 +08:00 |
|
|
|
51326f3d02
|
fix #3245 (#3298)
|
2024-02-06 11:47:25 +08:00 |
|
|
|
130191f4ed
|
add in:header tag cache for http request to enhance performance (#2923)
|
2023-09-25 21:34:58 +08:00 |
|
|
|
7e16d9b63e
|
fix codes due to static codes analysis (#2935)
|
2023-09-07 20:22:20 +08:00 |
|
|
|
45e4c9e16c
|
add tag value of in support for api definition that has meta info (#2450)
|
2023-03-13 19:29:30 +08:00 |
|
|
|
8357b0f649
|
improve comment
|
2022-03-19 17:58:21 +08:00 |
|
|
|
7767bf4d5d
|
重跑ci
|
2022-03-11 07:54:34 +08:00 |
|
|
|
5813979479
|
重跑ci
|
2022-03-10 14:32:06 +08:00 |
|
|
|
2471130f59
|
重跑ci
|
2022-03-10 09:52:45 +08:00 |
|
|
|
12eb3ac63e
|
[fix bug] the default value of r.get is invalid
|
2022-03-10 09:33:33 +08:00 |
|
|
|
4e2d378145
|
improve file uploading using strict route feature
|
2022-03-02 21:15:16 +08:00 |
|
|
|
7b22355abb
|
expose package internal/structs as os/gstructs; add package gtag for custom tag storage feature
|
2021-11-24 16:17:50 +08:00 |
|
|
|
79a233eb78
|
example&comment update
|
2021-11-01 19:46:39 +08:00 |
|
|
|
fa5499373a
|
replace char <xxx> to ;add GetWithEnv/GetWithCmd fuctions for package gcfg
|
2021-10-21 18:22:47 +08:00 |
|
|
|
1bc0635f8b
|
version 2
|
2021-10-11 21:41:56 +08:00 |
|
|
|
df09d8c604
|
refract package ghttp/gredis/glog
|
2021-09-27 21:27:24 +08:00 |
|
|
|
2e49c33cc7
|
remove depecated functions from package ghttp
|
2021-09-19 23:13:53 +08:00 |
|
|
|
b06580d343
|
improve struct validation for package gvalid
|
2021-05-12 00:01:52 +08:00 |
|
|
|
093034acd1
|
copyright comment update
|
2021-01-17 21:46:25 +08:00 |
|
|
|
e06b62ecf2
|
add default value from struct tag for ghttp.Request
|
2020-11-08 15:44:04 +08:00 |
|
|
|
0a203d1e22
|
fix issue in struct converting for ghttp.Request
|
2020-10-19 11:29:41 +08:00 |
|
|
|
737af527cd
|
improve *Struct functions for ghttp.Request
|
2020-08-13 23:29:00 +08:00 |
|
|
|
820e4302b7
|
improve function *Struct for ghttp.Request
|
2020-08-13 18:51:59 +08:00 |
|
|
|
46bdde9265
|
revert gvar.Var from interface to struct
|
2020-06-29 13:40:19 +08:00 |
|
|
|
4d38b508a3
|
improve gvar by changig gvar.Var from type struct to interface
|
2020-06-16 17:38:05 +08:00 |
|
|
|
b79ff84c6f
|
add struct slice conversion for request parameters for ghttp.Request; improve package gconv
|
2020-04-30 16:53:47 +08:00 |
|
|
|
36401a063d
|
improve gutil.Dump, improve sqlite file searching when opening db file
|
2020-03-19 13:38:42 +08:00 |
|
|
|
fe5d2e5685
|
improve parameter parsing feature for ghttp.Request
|
2020-01-01 14:18:00 +08:00 |
|
|
|
922e720d63
|
improve gdb/ghttp/gins; fix issue in gstr
|
2019-12-19 15:14:05 +08:00 |
|
|
|
f775479c3f
|
fix issue in ghttp.Request.GetRequest*
|
2019-12-05 10:44:31 +08:00 |
|
|
|
2a2cfc289c
|
improve ghttp.Client
|
2019-12-01 14:07:36 +08:00 |
|
|
|
5c749e7762
|
improve parameters handling for ghttp.Request
|
2019-11-30 09:42:07 +08:00 |
|
|
|
b3fafc64f8
|
improve parameter handling for ghttp.Request
|
2019-11-29 22:02:19 +08:00 |
|