Lots of refactoring, ensuring that a filename isn't saved into ZipOutputStream with the same name (which causes it to break)
Working download
A few rescues