Korrigiert mich, wenn ich falsch liege, aber wenn ich einen Downloaddialog erzwingen möchte, benutze ich Octet/stream:
Ein schmutziger Hack würde darin bestehen, dem Browser einen ihm völlig unbekannten, ggf. zufällig generierten Content-Type-Header zu senden um einen "Speichern unter..." Dialog aus ihm herauszuwürgen. Tablet-Benutzer erfreuen sich gelegentlich dann der Tatsache, dass sie diesen fiesen Dialog gar nicht erst zu sehen bekommen.
Weiterhin übergebe ich gerne Pfade per GET an die download.php, etwa download.php?file="datei.pdf" und evaluiere den Parameter.
Mach eine interne Tabelle als Map von {number => /path/file}, lege als Parameter file=number in die Klick-Links und Du ersparst Dir das Gefummel mit den Pfadangaben und schreibst Dir keine sicherheitsbedenklichen Geschichten. Eine solche Konfiguration ist einfacher zu pflegen als der Programmcode, des Weiteren kann dafür auch ein Basisverzeichnis konfiguriert sein und die Download-Liste kann aus der Konfiguration heraus automatisch erstellt werden.
MfG