Sto dando il link di un file pdf sulla mia pagina web per il download, come qui sotto
<a href="myfile.pdf">Download Brochure</a>
Il problema è che quando l'utente clicca su questo link, allora
Ma voglio sempre pop-up all'utente per il download, indipendentemente da "Adobe acrobat" è installato o no.
Per favore ditemi come posso fare questo?
Invece di linkare il file .PDF, fai qualcosa come
<a href="pdf_server.php?file=pdffilename">Download my eBook</a>
che emette un'intestazione personalizzata, apre il PDF (binario sicuro) e stampa i dati sul browser dell'utente, che può scegliere di salvare il PDF nonostante le impostazioni del browser. Il pdf_server.php dovrebbe assomigliare a questo:
header("Content-Type: application/octet-stream");
$file = $_GET["file"] .".pdf";
header("Content-Disposition: attachment; filename=" . urlencode($file));
header("Content-Type: application/octet-stream");
header("Content-Type: application/download");
header("Content-Description: File Transfer");
header("Content-Length: " . filesize($file));
flush(); // this doesn't really matter.
$fp = fopen($file, "r");
while (!feof($fp))
{
echo fread($fp, 65536);
flush(); // this is essential for large downloads
}
fclose($fp);
PS: e ovviamente eseguire alcuni controlli di sanità mentale sulla variabile "file" per evitare che la gente rubi i vostri file, come don't accettare le estensioni dei file, negare gli slash, aggiungere .pdf al valore
Questa è la chiave:
header("Content-Type: application/octet-stream");
Content-type application/x-pdf-document o application/pdf viene inviato durante l'invio del file PDF. Adobe Reader di solito imposta il gestore per questo tipo MIME in modo che il browser passi il documento ad Adobe Reader quando uno qualsiasi dei tipi MIME PDF viene ricevuto.
In un'applicazione Ruby on Rails (specialmente con qualcosa come la gemma Prawn e il plugin Prawnto Rails), potete realizzare questo in modo un po' più semplice di uno script completo (come il precedente esempio PHP).
Nel vostro controller:
def index
respond_to do |format|
format.html # Your HTML view
format.pdf { render :layout => false }
end
end
La parte render :layout => false dice al browser di aprire il prompt "Would you like to download this file?" invece di tentare il rendering del PDF. Quindi sareste in grado di collegarvi al file normalmente: http://mysite.com/myawesomepdf.pdf