2008-09-16 18 views
31

में डायनामिक पीडीएफ के लिए फ़ाइल नाम निर्दिष्ट करना प्रतिक्रिया स्ट्रीम में डेटा डंप करते समय मैं फ़ाइल नाम कैसे निर्दिष्ट कर सकता हूं?एएसपीनेट

अभी मैं कर रहा हूँ निम्नलिखित:

byte[] data= GetFoo(); 
Response.Clear(); 
Response.Buffer = true; 
Response.ContentType = "application/pdf";    
Response.BinaryWrite(data); 
Response.End(); 
ऊपर कोड के साथ

, मैं फ़ाइल नाम को बचाने के लिए के रूप में "foo.aspx.pdf" मिलता है। मुझे लगता है कि सहेजने के लिए फ़ाइल नाम निर्दिष्ट करने के लिए प्रतिक्रिया में हेडर जोड़ने में सक्षम होना याद है। FYI करें

Response.AddHeader("content-disposition", @"attachment;filename=""MyFile.pdf"""); 

उत्तर

53

हैडर के लिए एक सामग्री-स्वभाव जोड़ें। उपयोगकर्ता को ओपन/सेव वार्तालाप के साथ संकेत देने के बजाय।

Response.AppendHeader("content-disposition", string.Format("inline;FileName=\"{0}\"", fileName)); 
+3

डबल कोट्स फ़ाइल नाम के चारों ओर रखा जाना चाहिए। Http://kb.mozillazine.org/Filenames_with_spaces_are_truncated_upon_download –

15
Response.AppendHeader("Content-Disposition", "attachment; filename=foo.pdf"); 
+4

यदि कोई सोच रहा है कि 'AddHeader' और' AppendHeader 'दोनों मौजूद क्यों हैं, [आश्चर्य नहीं है ...] (http://msdn.microsoft.com/en-us/library/system.web.httpresponse। addheader.aspx) –

+0

http://stackoverflow.com/a/5648407/672244 – idok

+0

कैसे के रूप में गतिशील है कि फ़ाइल नाम बनाने के लिए Response.AppendHeader ("सामग्री-विन्यास", "लगाव; फ़ाइल नाम =" + Projname + " .pdf "); @ Skliwz –

1
Response.AddHeader("Content-Disposition", "attachment;filename=" & FileName & ";") 
+3

देखें जो वीबी सिंटैक्स की तरह गंध करता है। –

+0

चेतावनी के रूप में मंद चेतावनियां() – JoshYates1980

15

... यदि आप "इनलाइन" "लगाव" फ़ाइल के बजाय का उपयोग IE में अपने आप खुल जाएगा:

+0

यह वही है जो मैं ढूंढ रहा था। अगली समस्या यह है कि मैं एक डिफ़ॉल्ट फ़ाइल नाम सेट करना चाहता हूं ताकि जब वे सहेजें बटन दबाएंगे तो उसके पास सही फ़ाइल नाम डिफ़ॉल्ट होगा। अभी फ़ाइल नाम एएसपीएक्स पेज नाम पर सेट है जो पीडीएफ उत्पन्न करता है। किसी को भी सुझाव मिला है? – Kevbo

1

किसी कारण से, अधिकांश उत्तर फ़ाइल नाम मान को एन्कोड करने का भी प्रयास नहीं करते हैं। यदि फ़ाइल में रिक्त स्थान, अर्धविराम या उद्धरण शामिल हैं, तो यह सही ढंग से नहीं आ सकता है।

ऐसा लगता है कि आप एक सही हेडर मूल्य उत्पन्न करने के लिए ContentDisposition वर्ग का उपयोग कर सकते हैं:

Response.AppendHeader("Content-Disposition", new ContentDisposition 
{ 
    FileName = yourFilename 
}.ToString()); 

आप the source code for ContentDisposition.ToString() की जांच कर सकते पुष्टि करने के लिए है कि यह इसे ठीक से एन्कोड करने के लिए कोशिश कर रहा है।

चेतावनी: फ़ाइल नाम में एक डैश (एक हाइफ़न नहीं) होने पर यह क्रैश प्रतीत होता है। मैंने अभी तक इस पर ध्यान नहीं दिया है।