2013-04-07 8 views
12

निम्नलिखित एक पीडीएफ देता है जो ब्राउजर सीधे इनलाइन को प्रदर्शित करने का प्रयास करता है। यह सही ढंग से काम करता है। हालांकि, अगर मैं फ़ाइल डाउनलोड करने का प्रयास करता हूं, तो डाउनलोड नाम "myPDF.pdf" नहीं है, बल्कि इसके बजाय मार्ग में आईडी (myapp/नियंत्रक/पीडीएफ जेनरेटर/आईडी) है। क्या फ़ाइल डाउनलोड नाम "myPDF.pdf" होना संभव है?एएसपी.नेट एमवीसी फाइलस्ट्रीम रिसेट, फ़ाइल डाउनलोड नाम का उपयोग नहीं किया गया है

public FileStreamResult PDFGenerator(int id) 
{ 
    MemoryStream ms = GeneratePDF(id); 

    byte[] file = ms.ToArray(); 
    MemoryStream output = new MemoryStream(); 
    output.Write(file, 0, file.Length); 
    output.Position = 0; 
    HttpContext.Response.AddHeader("content-disposition", 
    "inline; filename=myPDF.pdf"); 

    return File(output, "application/pdf", fileDownloadName="myPDF.pdf"); 
} 

उत्तर

15

नहीं, पीडीएफ प्रदर्शित इनलाइन के साथ यह संभव नहीं है। आप इस लक्ष्य को हासिल कर सकता है अगर आप एक अनुलग्नक के रूप के साथ सामग्री-विन्यास हैडर भेजें:

public ActionResult PDFGenerator(int id) 
{ 
    Stream stream = GeneratePDF(id); 
    return File(stream, "application/pdf", "myPDF.pdf"); 
} 

यह भी ध्यान दें मैं अनावश्यक MemoryStream कैसे हटाया आप उपयोग कर रहे थे और स्मृति में पीडीएफ सीधे करने के लिए इसे ही स्ट्रीम आप हो सकता था जहां लोड हो रहा है ग्राहक जो अधिक कुशल होता।

+0

हाँ की तरह खत्म हो, कि मेरा उत्तर के पूरे मुद्दे था। अगर आप फ़ाइल को इनलाइन प्रदर्शित करना चाहते हैं तो ** ** एक फ़ाइल नाम निर्दिष्ट नहीं कर सकता है। यदि आप पीडीएफ फाइल इनलाइन प्रदर्शित करते हैं, तो यह पीडीएफ फाइलों को खोलने के लिए क्लाइंट मशीन पर जुड़े प्लगइन के साथ खोला जाता है। विभिन्न प्लगइन के बीच व्यवहार अलग-अलग होगा। –

+0

@ नलान एम उत्तर इसे ज्यादातर मामलों में डाउनलोड करने के लिए मजबूर कर सकता है। तो, इसे संभव नहीं कहा जाना चाहिए। –

+0

एक प्रश्न, जो यहां स्ट्रीम का निपटान करने का ख्याल रखता है? – Legends

4

आप FileStreamResult फ़ाइल डाउनलोड करने के लिए उपयोग कर रहे हैं, नियंत्रक

Response.ContentType = "application/pdf"; 
Response.AddHeader("Content-Disposition", "attachment; filename=FileName.pdf"); 
+0

पीडीएफ कार्यों में मेरे निर्यात पर डेटा ** सादा पाठ ** ** ** iframe ** को संलग्नक प्रकार के बजाय बदल देता है। सहेजने वाले संवाद को पॉप अप करने के लिए इसे मजबूर करने के लिए मुझे इन दो पंक्तियों को जोड़ना पड़ा। – OldTrain

0

यह आईडी एक स्ट्रिंग जो विस्तार के बिना फ़ाइल नाम का प्रतिनिधित्व करता है बनाने के द्वारा संभव है में इस का उपयोग करें।

public ActionResult PDFGenerator(string id, int? docid) 
{ 
    Stream stream = GeneratePDF(docid); 
    return new FileStreamResult(stream , "application/pdf"); 
} 

यूआरएल तो फिर इस

..PDFGenerator/Document2?docid=15 
संबंधित मुद्दे