aiohttp already percent-decodes request.query values, so calling
urllib.parse.unquote() a second time turned a literal "%20" in a filename
into a space. Previews for files such as Female%20_nude.mp4 therefore
404ed, while renaming the file to use a real space masked the bug.
Use the decoded query value as-is and add regression tests for literal
"%20" and "%2F" filenames. Cached preview URLs need no migration: they
encode the percent sign once (%2520) and now resolve correctly.