2009-08-25 13 views
29

मैं एक सवाल है स्थापित करने के लिए कैसे, कैसे मैं इस तरह कुछ कर सकते हैंZend फ्रेमवर्क हेडर

 $this->getResponse() 
     ->setHeader('Content-Disposition:inline', ' filename=result.pdf') 
     ->setHeader('Content-type', 'application/x-pdf'); 

लेकिन सही ढंग से काम नहीं करता है ।

शुभकामनाओं सहित,

+0

शायद हेडर पहले से ही भेजे गए हैं? – Pawka

+0

पीडीएफ के लिए सही माइम-टाइप एप्लिकेशन/पीडीएफ है। –

उत्तर

53

प्रतिक्रिया हेडर स्थापित करने के लिए अपने बयान से थोड़ा विकृत है:

$this->getResponse() 
    ->setHeader('Content-Disposition', 'inline; filename=result.pdf') 
    ->setHeader('Content-type', 'application/x-pdf'); 

ऊपर काम करना चाहिए - कृपया Content-Disposition में अंतर ध्यान दें - हैडर।

वैसे ... जब आप एक डाउनलोड बॉक्स को मजबूर करना चाहते हैं (ब्राउज़र में दस्तावेज़ लोड करने के बजाय) आपको Content-Dispositionattachment का उपयोग करना चाहिए।

$this->getResponse() 
    ->setHeader('Content-Disposition', 'attachment; filename=result.pdf') 
    ->setHeader('Content-type', 'application/x-pdf'); 

ब्राउज़र पर निर्भर यह संभव हो सकता है आप भी application/force-download, application/octet-stream और/या application/download के एक या अधिक की Content-Length (एकाधिक हेडर) सेट या एक संयोजन के Content-type बदलना होगा। और जैसा कि मैंने टिप्पणी में लिखा था कभी-कभी कैशिंग हेडर आपके डाउनलोड में हस्तक्षेप कर सकते हैं। यह देखने के लिए जांचें कि कौन से कैशिंग-हेडर भेजे जाते हैं।

+0

आप उदाहरण हैं एसआर काम नहीं करते हैं, मुझे अब डाउनलोड बॉक्स नहीं मिलता है। मेरा कोड यहां है: http://pastebin.com/d6be142ab – Uffo

+0

कौन सा ब्राउज़र? और क्या आप जांच सकते हैं कि वास्तव में तार पर कौन से हेडर भेजे जाते हैं? विशेष रूप से कुछ कैशिंग-हेडर फ़ाइल-डाउनलोड में अंतर कर सकते हैं। –

+4

@Uffo: यदि आप डाउनलोड को मजबूर करना चाहते हैं, तो आपको अपने प्रश्न में ऐसा कहना चाहिए। आपने केवल पूछा है कि हेडर सेट करने का सही तरीका क्या है, और एस गेह्रिग का मूल जवाब बस यही था। – Rytmis

-5

हल

 $this->getResponse() 
     ->setHeader('Content-Disposition:inline', ';filename=result.pdf') 
      ->setHeader('Content-Type', 'application/x-pdf'); 
+2

एस गेह्रिग के जवाब को देखो, यह सही है। आपका काम कर सकता है, लेकिन केवल आकस्मिक रूप से। ": इनलाइन" हेडर के नाम का हिस्सा नहीं है। – Rytmis

6

तालिका के देर से, मैं this action helper को फ़ाइलों को भेजने या ब्राउज़र में मेमोरी डेटा में एक सरल, पुन: प्रयोज्य घटक के रूप में अनुशंसा कर सकता हूं।

कैशिंग, स्वभाव के लिए विकल्प हैं और अपाचे Sendfile

+0

अच्छा लगता है धन्यवाद – Mark

+3

लिंक मर चुका है; कोई विकल्प? –

+1

@Aron देखें http://github.com/noginn/noginn/blob/master/Noginn/Controller/Action/Helper/SendFile.php –

2

उपयोग कर सकते हैं मेरा अनुमान है कि आप की तरह कुछ कर रहे है:

$this->getResponse() 
     ->setHeader('Content-Disposition:inline', ' filename=result.pdf') 
     ->setHeader('Content-type', 'application/x-pdf'); 
fpassthru($filename); 
exit(); 

या कुछ और।

यहां प्रतिक्रिया कभी प्रस्तुत नहीं की जाएगी (जो शीर्षलेख प्रस्तुत करती है)। आमतौर पर पोस्ट-एक्शन प्रिंटिंग के दौरान प्रतिक्रिया प्रदान की जाती है।

आपको सीधे हेडर सेट करना होगा (जैसा कि आपने गैर-ओओ कोड में नोट किया है), या सीधे $this->getResponse()->sendHeaders() का उपयोग करें।

0

मेरे पास हेडर सेट था। यह सेट नहीं किया गया था, लेकिन जोड़ा गया। तो मेरे पास सामग्री/प्रकार का टेक्स्ट-एचटीएमएल और एप्लिकेशन/पीडीएफ भी था।

->setHeader('Content-type', 'application/x-pdf', true);

setHeader($name, $value, $replace = false)

से: https://framework.zend.com/manual/1.12/de/zend.controller.response.html

सही के साथ सामग्री प्रकार चिह्नित करना डाउनलोड संभव आईओएस और अन्य उपकरणों में जो केवल गूढ़ प्रतीकों डाउनलोड करने या एक त्रुटि के बाद पता चला है बनाया

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