allow mixing existing file names and new uploaded files
This commit is contained in:
parent
52c64318c5
commit
d919d55b5e
|
@ -13,6 +13,7 @@ import (
|
||||||
"github.com/pocketbase/pocketbase/core"
|
"github.com/pocketbase/pocketbase/core"
|
||||||
"github.com/pocketbase/pocketbase/forms"
|
"github.com/pocketbase/pocketbase/forms"
|
||||||
"github.com/pocketbase/pocketbase/tools/filesystem"
|
"github.com/pocketbase/pocketbase/tools/filesystem"
|
||||||
|
"github.com/pocketbase/pocketbase/tools/list"
|
||||||
"github.com/pocketbase/pocketbase/tools/router"
|
"github.com/pocketbase/pocketbase/tools/router"
|
||||||
"github.com/pocketbase/pocketbase/tools/search"
|
"github.com/pocketbase/pocketbase/tools/search"
|
||||||
)
|
)
|
||||||
|
@ -561,9 +562,28 @@ func recordDataFromRequest(e *core.RequestEvent, record *core.Record) (map[strin
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
if len(uploadedFiles) > 0 {
|
if len(uploadedFiles) > 0 {
|
||||||
for k, v := range uploadedFiles {
|
for k, files := range uploadedFiles {
|
||||||
result[k] = v
|
uploaded := make([]any, 0, len(files))
|
||||||
|
|
||||||
|
// if not remove/prepend/append -> merge with the submitted
|
||||||
|
// info.Body values to prevent accidental old files deletion
|
||||||
|
if info.Body[k] != nil &&
|
||||||
|
!strings.HasPrefix(k, "+") &&
|
||||||
|
!strings.HasSuffix(k, "+") &&
|
||||||
|
!strings.HasSuffix(k, "-") {
|
||||||
|
existing := list.ToUniqueStringSlice(info.Body[k])
|
||||||
|
for _, name := range existing {
|
||||||
|
uploaded = append(uploaded, name)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, file := range files {
|
||||||
|
uploaded = append(uploaded, file)
|
||||||
|
}
|
||||||
|
|
||||||
|
result[k] = uploaded
|
||||||
}
|
}
|
||||||
|
|
||||||
result = record.ReplaceModifiers(result)
|
result = record.ReplaceModifiers(result)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -2345,7 +2345,7 @@ func TestRecordCrudUpdate(t *testing.T) {
|
||||||
}
|
}
|
||||||
|
|
||||||
formData3, mp3, err3 := tests.MockMultipartData(map[string]string{
|
formData3, mp3, err3 := tests.MockMultipartData(map[string]string{
|
||||||
router.JSONPayloadKey: `{"title": "title_test3", "testPayload": 123}`,
|
router.JSONPayloadKey: `{"title": "title_test3", "testPayload": 123, "files":"300_JdfBOieXAW.png"}`,
|
||||||
}, "files")
|
}, "files")
|
||||||
if err3 != nil {
|
if err3 != nil {
|
||||||
t.Fatal(err3)
|
t.Fatal(err3)
|
||||||
|
@ -2686,6 +2686,8 @@ func TestRecordCrudUpdate(t *testing.T) {
|
||||||
`"id":"mk5fmymtx4wsprk"`,
|
`"id":"mk5fmymtx4wsprk"`,
|
||||||
`"title":"title_test3"`,
|
`"title":"title_test3"`,
|
||||||
`"files":["`,
|
`"files":["`,
|
||||||
|
`"300_JdfBOieXAW.png"`,
|
||||||
|
`"tmpfile_`,
|
||||||
},
|
},
|
||||||
ExpectedEvents: map[string]int{
|
ExpectedEvents: map[string]int{
|
||||||
"*": 0,
|
"*": 0,
|
||||||
|
|
Binary file not shown.
Loading…
Reference in New Issue