Corrupted means, that browser offers wrong file name to download - (it offers template name of the running code, because the file does not exist).
That means your Content-Disposition header is wrong, or not present; not that the file doesn’t exist. I would hope any file you download doesn’t exist on the destination already. And that’s browser behavoir, not Lucee behavior.
If you got a Lucee error screen with “File does not exist” as an error - then that’s on the server side.
And when I click save, it says that file doesn’t exist.
It = browser? It = lucee error page? It = what?
Have you tried using developer tools to look at the network request? Verify all the headers are present and correct?