HTML linki PDF dosyası olarak indirilebilen nasıl yapılır?

11 Cevap php

Aşağıda gibi, indirmek için benim web sayfasında pdf dosyası linki veriyorum

<a href="myfile.pdf">Download Brochure</a>

Kullanıcı daha sonra bu linke tıkladığında sorun

  • Kullanıcı Adobe Acrobat yüklü varsa, o Adobe Reader aynı tarayıcı penceresinde dosyayı açar.
  • Adobe Acrobat yüklü değilse o zaman pop-up kullanıcı dosyayı indirme için.

Ama ben her zaman pop-up indirmek için kullanıcıya, ne olursa olsun "Adobe Acrobat" yüklü ya da değil istiyorum.

Ben bunu nasıl söyle lütfen?

11 Cevap

Bunun yerine. PDF dosyasına bağlama, yerine gibi bir şey yapmak

<a href="pdf_server.php?file=pdffilename">Download my eBook</a>

özel bir başlık çıktılar, hangi PDF (ikili güvenli) açar ve kullanıcının tarayıcısına veriyi yazdırır, sonra onların tarayıcı ayarlarını rağmen PDF kaydetmek için seçebilirsiniz. Pdf_server.php bu gibi görünmelidir:

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:. Ve açıkçası böyle değer pdf eklemek, dosya uzantılarını kabul etmiyoruz gibi dosyalarınızı çalmak engellemek için "dosya" değişken üzerinde bazı sağlık kontrolleri çalıştırmak

Bu yaygın bir sorundur ancak birkaç kişi bir basit HTML 5 çözümü var biliyorum:

<a href="./directory/yourfile.pdf" download="newfilename">Download the pdf</a>

newfilename dosyayı kaydetmek için kullanıcı için önerilen dosya nerede. Böyle, boş bırakırsan ya da serverside dosya varsayılan olacaktır:

<a href="./directory/yourfile.pdf" download>Download the pdf</a>

Uyumluluk: Firefox 21 ve Demir bu test, hem de iyi çalıştı. Bu HTML5-uyumsuz veya eski tarayıcılarda işe yaramayabilir. Indir zorlamadım ben test tek tarayıcı IE ...

Don't loop through every file line. Use readfile instead, its faster. This is off the php site: http://php.net/manual/en/function.readfile.php

$file = $_GET["file"];
if (file_exists($file)) {
    header('Content-Description: File Transfer');
    header('Content-Type: application/octet-stream');
    header("Content-Type: application/force-download");
    header('Content-Disposition: attachment; filename=' . urlencode(basename($file)));
    // header('Content-Transfer-Encoding: binary');
    header('Expires: 0');
    header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
    header('Pragma: public');
    header('Content-Length: ' . filesize($file));
    ob_clean();
    flush();
    readfile($file);
    exit;
}

Birisi bazı php dosyaları indirmek olabilir gibi olsun değişken sterilize emin olun ...

Bunun yerine dosyayı okumak ve temizlemek için, bir PHP komut dosyası kullanarak, bu .htaccess kullanarak başlığını yeniden daha düzgün bulunuyor. Bu "güzel" bir URL (myfile.pdf yerine download.php?myfile arasında) devam edecektir.

<FilesMatch "\.pdf$">
ForceType applicaton/octet-stream
Header set Content-Disposition attachment
</FilesMatch>

Bu anahtar:

header("Content-Type: application/octet-stream");

PDF dosyası gönderirken içerik türü application / x-pdf-belge veya uygulama / pdf gönderilir. Adobe Reader genellikle PDF MIME türlerinin herhangi alındığında böylece tarayıcı Adobe Reader belgeyi geçecek bu MIME türü için işleyicisi ayarlar.

Ben incelikle alçaltır düz eski HTML ve JavaScript / jQuery ile bunu yapmak için bir yol buldu. IE7-10, Safari, Chrome ve FF test:

Indirme bağlantısı için HTML:

<p>Thanks for downloading! If your download doesn't start shortly, 
<a id="downloadLink" href="...yourpdf.pdf" target="_blank" 
type="application/octet-stream" download="yourpdf.pdf">click here</a>.</p>

küçük bir gecikmeden sonra linke tıklayarak simüle jQuery (saf JavaScript kodu daha ayrıntılı olurdu):

var delay = 3000;
window.setTimeout(function(){$('#downloadLink')[0].click();},delay);

Bu daha güçlü hale getirmek için HTML5 özelliği algılama eklemek ve orada değilse o dosya ile yeni bir pencere açmak için window.open() kullanın.

Bir zip / rar dosyasının içinde dosya koymak :)

(Özellikle karides mücevher ve Prawnto Raylar eklenti gibi bir şey ile) Raylar uygulama üzerinde bir Ruby, biraz daha sade (önceki PHP örnekte olduğu gibi) senaryosu üzerinde tam bir daha bu gerçekleştirebilirsiniz.

Sizin denetleyicisi:

def index

 respond_to do |format|
   format.html # Your HTML view
   format.pdf { render :layout => false }
 end
end

Render: "Eğer bu dosyayı indirmek ister misiniz" layout => sahte bölüm açmak için tarayıcı söyler PDF işlemek için çalışmakla yerine soracak. Sonra normal dosyaya bağlamak mümkün olacaktır: http://mysite.com/myawesomepdf.pdf

Bu deneyin:

<a href="pdf_server_with_path.php?file=pdffilename&path=http://myurl.com/mypath/">Download my eBook</a>

Pdf_server_with_path.php içindeki kodu:

header("Content-Type: application/octet-stream");

$file = $_GET["file"] .".pdf";
$path = $_GET["path"];
$fullfile = $path.$file;

header("Content-Disposition: attachment; filename=" . Urlencode($file));   
header("Content-Type: application/force-download");
header("Content-Type: application/octet-stream");
header("Content-Type: application/download");
header("Content-Description: File Transfer");            
header("Content-Length: " . Filesize($fullfile));
flush(); // this doesn't really matter.
$fp = fopen($fullfile, "r");
while (!feof($fp))
{
    echo fread($fp, 65536);
    flush(); // this is essential for large downloads
} 
fclose($fp);

Bazen sitemizde, bir download linki lazım. Bu bağlantıyı herhangi bir dosya türü tıkladığınızda, resim, pdf download.you basit bir php komut dosyası kullanarak bunu yapabilirsiniz olacaktır.

Eğer yukarıda dosyasında kullanabileceğiniz bir php dosya adı "download.php" oluşturun.

<?php
  $file = $_GET["file"];

  if (file_exists($file)) {
  header('Content-Description: File Transfer');
  header('Content-Type: application/octet-stream');
  header("Content-Type: application/force-download");
  header('Content-Disposition: attachment; filename=' . urlencode(basename($file)));
  // header('Content-Transfer-Encoding: binary');
  header('Expires: 0');
  header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
  header('Pragma: public');
  header('Content-Length: ' . filesize($file));
  ob_clean();
 flush();
  readfile($file);
 exit;
}
?>

First Create a simple html file where you want to add download link

Ben ortak kişinin J_D çözümü arıyor olacak düşünüyorum, bu kadar basit!

<a href="./directory/yourfile.pdf" download="newfilename">Download the pdf</a>