Anında indirilebilir pdf dosyasını yeniden adlandırma

5 Cevap php

Verilen: sunucusundaki tüm tarih pdf dosyaları damgaları ile başlamaktadır. Daha sonra kullanıcı tekrar bu dosyaları indirebilirsiniz. Bunlar (çirkin) dosya isimleri sunucusuna yeniden değiştirmek asla.

Soru: Ben PDF dosyasını indirmek için seçeneği verdiğinizde, dosyanın adını çirkin ve uzun görünüyor. Ne zaman kullanıcı indir Bu dosya, adı garip görünmüyor böylece Nasıl, mantıklı bir şey için bu adı değiştirebilirsiniz?

Orijinal dosyayı yeniden adlandırma bir seçenek değildir çünkü ben, bir kopyasını yapmak gerekiyor? Her indirilebilir dosya için ekstra yükü olmaz mı? Açıkçası kopyalanan dosyayı silerek başka bir ekstra adım olacaktır?

Bu dosya tamamen istemci tarafında indirilen bir kez dosyayı yeniden adlandırmak mümkün mü?

Siz ne önerirsiniz?

5 Cevap

Böyle bir şey:

<?php
// We'll be outputting a PDF  
header('Content-type: application/pdf');

// It will be called downloaded.pdf  
header('Content-Disposition: attachment; filename="downloaded.pdf"');

// The PDF source is in original.pdf  
readfile('original.pdf');
?> 

Ben yeni bir proje için bunu yapmak için gerekli ve nasıl uygulanacağı konusunda biraz karışık oldu, ama kısa bir süre Klaus'un cevabı gördükten sonra anladım. Ayrıca Klaus'un 'yanıtı üzerine ayrıntılı için:

1) "process.php", diyelim ki, adında bir dosya oluşturun. Orijinal dosya ve yeni isim: Bu iki parametre kabul eder, böylece Klaus'un kodu değiştirin. Benim process.php gibi görünüyor:

<?php
$file = $_GET['file'];
if (file_exists($file)) {
    header('Content-Description: File Transfer');
    header('Content-Type: application/pdf');
    header('Content-Disposition: attachment; filename='.$_GET['newFile']);
    header('Content-Transfer-Encoding: binary');
    header('Content-Length: ' . filesize($file));
    ob_clean();
    flush();
    readfile($file);
    exit;
}
?>

2) işlemci komut işaret kullanıcı bakan sayfasında bir bağlantı oluşturun:

<a href="process.php?file=OriginalFile.pdf&newFile=MyRenamedFile.pdf">DOWNLOAD ME</a>

Sen Content-Disposition başlığında istenen dosya ayarlamanız gerekir:

$name = 'desiredname.pdf';
header('Content-Disposition: attachment;filename="' . $name . '"');

Ama ne yazık ki bu Redmond bir ekip tarafından geliştirilen belirli bir gezgini tarafından yakalandı olmayacaktır. Eğer o da bu tarayıcıda işe almak istiyorsanız, o zaman istek yolunun son parçası olarak aynı dosya eklemek gerekir. Örneğin: http://example.com/pdf/desiredname.pdf.

Sunulan içeriğin dosya HTTP başlıkları tanımlanır. Daha fazla bilgi için PHP page on headers (ayrıca yorumların) Etrafına bir bak.

Ben (benim durumumda, onları yeniden adlandırmak için, ama bunları indirirken kişi kaydedilir ve bu dosyaları görmek için izin olduğunu kontrol etmek için değil) php dosyalarını hizmet, bir süre önce benzer bir şey yapıyordu. Ben de bu başlıkları eklenen sürece pdf indirme IE işe yaramadı bulundu:

header('Pragma: public');
header('Expires: 0');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Content-Transfer-Encoding: binary');

Ben neden emin değilim. Deney ve ne olduğunu görün.