2009-12-01 11 views
5

पर डाउनलोड करने के लिए पीडीएफ फ़ाइल का नाम बदलें: सर्वर पर सभी अपलोड की गई पीडीएफ फाइलें टाइमस्टैम्प के साथ प्रीफ़िक्स्ड हैं। बाद में उपयोगकर्ता इन फ़ाइलों को फिर से डाउनलोड कर सकते हैं। ये (बदसूरत) फ़ाइल नाम सर्वर पर फिर कभी नहीं बदलेगा।फ्लाई

प्रश्न: जब मैं पीडीएफ फ़ाइल डाउनलोड करने का विकल्प देता हूं, तो फ़ाइल का नाम बदसूरत और लंबा दिखता है। मैं इस नाम को कुछ समझदार कैसे बदल सकता हूं, ताकि जब उपयोगकर्ता इस फ़ाइल को डाउनलोड करता है, तो नाम अजीब नहीं दिखता है?

क्या मुझे एक प्रतिलिपि बनाने की आवश्यकता है, क्योंकि मूल फ़ाइल का नाम बदलने का विकल्प नहीं है? क्या यह प्रत्येक डाउनलोड करने योग्य फ़ाइल के लिए अतिरिक्त ओवरहेड नहीं होगा? स्पष्ट रूप से कॉपी की गई फ़ाइल को हटाने से एक और अतिरिक्त कदम होगा?

क्या क्लाइंट पक्ष पर पूरी तरह से फ़ाइल डाउनलोड होने के बाद फ़ाइल का नाम बदलना संभव है?

आप क्या सुझाव देते हैं?

उत्तर

10

कुछ इस तरह:

<?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'); 
?> 
+0

'सामग्री-type'' होना चाहिए सामग्री-Type':

<?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) कि प्रोसेसर स्क्रिप्ट को इंगित करता है अपने उपयोगकर्ता की ओर मुख पृष्ठ पर एक लिंक बनाएं , हालांकि। – jensgram

+0

@ जेन्सग्राम: यह मामला संवेदनशील नहीं है। – BalusC

+0

@klausbyskov: कृपया बलससी द्वारा नीचे दी गई टिप्पणी देखें। उनके अनुसार यह आईई पर काम नहीं करेगा? – understack

0

सेवा की सामग्री के फ़ाइल नाम HTTP हेडर में परिभाषित किया गया है। अधिक जानकारी के लिए PHP page on headers (टिप्पणियां भी) के आसपास देखें।

1

आप Content-Disposition शीर्षक में वांछित फ़ाइल नाम निर्धारित करने की आवश्यकता:

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

लेकिन दुर्भाग्य से इस रेडमंड में एक टीम द्वारा विकसित एक निश्चित webbrowser द्वारा उठाया नहीं किया जाएगा। यदि आप इसे उस ब्राउज़र में भी काम करना चाहते हैं, तो आपको अनुरोध पथ के अंतिम भाग के रूप में एक ही फ़ाइल नाम को जोड़ना होगा। उदाहरण के लिए: http://example.com/pdf/desiredname.pdf

+0

मुझे लगता है कि तकनीकी रूप से फ़ाइल नाम पैरामीटर उद्धरण चिह्नों में नहीं होना चाहिए।यदि नाम में कोई रिक्त स्थान या मजाकिया वर्ण नहीं हैं, तो इसे उद्धरण चिह्नों से बाहर छोड़ दें। – TRiG

+0

@ बाल्लूसी: यह http://stackoverflow.com/questions/698308/why-doesnt-content-disposition-header-work-in-ie-8 इस तरह सहायक था। धन्यवाद। – understack

0

मैं कुछ समय पहले ऐसा कुछ कर रहा था, php के माध्यम से फाइलों की सेवा कर रहा था (मेरे मामले में, उनका नाम बदलने के लिए नहीं, लेकिन यह जांचने के लिए कि उन्हें डाउनलोड करने वाला व्यक्ति लॉग इन था और उन फ़ाइलों को देखने की अनुमति थी)। मैंने पाया कि पीडीएफ डाउनलोड आईई में काम नहीं करते हैं जब तक कि मैंने इन शीर्षकों को भी जोड़ा नहीं:

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

मुझे यकीन नहीं है कि क्यों। प्रयोग करें और देखें कि क्या होता है।

6

मुझे हाल ही में एक परियोजना के लिए ऐसा करने की ज़रूरत है और इसे लागू करने के तरीके पर थोड़ा उलझन में था, लेकिन क्लॉस के जवाब को देखने के तुरंत बाद इसे समझ लिया गया। क्लाउस की प्रतिक्रिया पर आगे विस्तार करने के लिए:

1) "process.php" नामक एक फ़ाइल बनाएं। क्लाउस के कोड को संशोधित करें ताकि यह दो पैरामीटर स्वीकार कर सके: मूल फ़ाइल नाम और नया नाम। मेरे process.php लगता है:

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

अगर मेरी फ़ाइल 'myFiles' निर्देशिका में रखी गई है, तो मैं यहां पथ कैसे सेट कर सकता हूं? मैं थोड़ा उलझन में हूँ। क्या तुम मुझे समझा सकते हो? –

+0

मैंने पाया कि। मैंने फ़ाइल नाम '$ file =' myFiles/sample.pdf 'के रूप में असाइन किया है; '। यह आकर्षण की तरह काम कर रहा है ... कोड के लिए धन्यवाद ... +1 –

संबंधित मुद्दे