Commit 3a09387
fix: resolve 404/500 error when downloading files containing hash in filename (#15799)
### What?
Fixes file downloads returning 404 for filenames containing `#` when
served through the REST API.
### Why?
Next.js catch-all `[...slug]` params decodes URL-encoded segments before
passing them for further handling. So a request for
`/api/media/file/document%20%23123.pdf` arrives with slug segments
`['media', 'file', 'document #123.pdf']`.
These decoded segments are joined and passed to handleEndpoints, but the
implementation of handleEndpoints is using `path-to-regexp` with a
configuration that expectes urlencoded path segments.
### How?
Re-encode each slug segment with `encodeURIComponent` before joining:
handleEndpoints already uses match(endpoint.path, { decode:
decodeURIComponent }), so params are decoded back to their original
values after matching
Also adds a test that creates a file with # in the filename and verifies
it can be served via REST.
Fixes #15798
---------
Co-authored-by: Paul Popus <paul@payloadcms.com>1 parent e284ab5 commit 3a09387
3 files changed
Lines changed: 57 additions & 2 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
37 | 37 | | |
38 | 38 | | |
39 | 39 | | |
40 | | - | |
| 40 | + | |
| 41 | + | |
| 42 | + | |
41 | 43 | | |
42 | 44 | | |
43 | 45 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1 | 1 | | |
2 | 2 | | |
3 | 3 | | |
4 | | - | |
| 4 | + | |
5 | 5 | | |
6 | 6 | | |
7 | 7 | | |
| |||
2240 | 2240 | | |
2241 | 2241 | | |
2242 | 2242 | | |
| 2243 | + | |
| 2244 | + | |
| 2245 | + | |
| 2246 | + | |
| 2247 | + | |
| 2248 | + | |
| 2249 | + | |
| 2250 | + | |
| 2251 | + | |
| 2252 | + | |
| 2253 | + | |
| 2254 | + | |
| 2255 | + | |
| 2256 | + | |
| 2257 | + | |
| 2258 | + | |
| 2259 | + | |
| 2260 | + | |
| 2261 | + | |
| 2262 | + | |
| 2263 | + | |
| 2264 | + | |
| 2265 | + | |
| 2266 | + | |
| 2267 | + | |
| 2268 | + | |
| 2269 | + | |
| 2270 | + | |
| 2271 | + | |
| 2272 | + | |
2243 | 2273 | | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
498 | 498 | | |
499 | 499 | | |
500 | 500 | | |
| 501 | + | |
| 502 | + | |
| 503 | + | |
| 504 | + | |
| 505 | + | |
| 506 | + | |
| 507 | + | |
| 508 | + | |
| 509 | + | |
| 510 | + | |
| 511 | + | |
| 512 | + | |
| 513 | + | |
| 514 | + | |
| 515 | + | |
| 516 | + | |
| 517 | + | |
| 518 | + | |
| 519 | + | |
| 520 | + | |
| 521 | + | |
| 522 | + | |
| 523 | + | |
501 | 524 | | |
502 | 525 | | |
503 | 526 | | |
| |||
0 commit comments