2008-12-03 12 views
6

मैं एक SQL डेटाबेस है कि कुछ दस्तावेजों को संग्रहीत करता है।सी # ASP.NET 3.5 सामग्री-विन्यास फ़ाइल डाउनलोड समस्याओं

कोई उपयोगकर्ता एप्लिकेशन में साइन इन कर सकता है, और उनके दस्तावेज़ों की एक सूची देख सकता है।

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

System.IO.FileInfo file = new System.IO.FileInfo(System.Configuration.ConfigurationManager.AppSettings["UploadPath"] + DocumentName); 

    Response.Clear(); 
    Response.ClearContent(); 
    Response.ClearHeaders(); 
    Response.Cookies.Clear(); 
    Response.Cache.SetCacheability(HttpCacheability.Private); 
    Response.CacheControl = "private"; 
    Response.Charset = System.Text.UTF8Encoding.UTF8.WebName; 
    Response.ContentEncoding = System.Text.UTF8Encoding.UTF8; 
    Response.AppendHeader("Content-Length", file.Length.ToString()); 
    Response.AppendHeader("Pragma","cache"); 
    Response.AppendHeader("Expires", "60"); 
    Response.ContentType = GetContentType(file.Extension); 
    Response.AppendHeader("Content-Disposition", 
    "inline; " + 
    "filename=\"" + file.Name + "\"; " + 
    "size=" + file.Length.ToString() + "; " + 
    "creation-date=" + DateTime.Now.ToString("R") + "; " + 
    "modification-date=" + DateTime.Now.ToString("R") + "; " + 
    "read-date=" + DateTime.Now.ToString("R")); 

मेरे GetContentType() विधि बस, फ़ाइलें मैं इजाजत दी कर रहा हूँ "application/पीडीएफ, आवेदन/msw0rd के लिए उपयुक्त फ़ाइल प्रकार का रिटर्न आदि

मेरे समस्या है जब फ़ाइल सहेजा जाता है कि, यह वेबपृष्ठ स्वयं है, फ़ाइल सिस्टम से फ़ाइल नहीं है। और Google क्रोम में, यह फ़ाइल नाम के अंत में एक .htm एक्सटेंशन डाल रहा है, मुझे लगता है क्योंकि यह जानता है कि यह एक वेब पेज है?

किसी भी तरह, पहले एक महान कदम वास्तविक फ़ाइल प्राप्त करने के लिए होगा, और नहीं एचटीएमएल वे वेब पृष्ठ की एक प्रतिलिपि पर बैठे हैं!

धन्यवाद।

उत्तर

9

कैसे आप फ़ाइल के वास्तविक सामग्री भेज रहे हैं ??

मैं आम तौर पर Response.TransmitFile विधि का उपयोग करते हैं, यह मूल रूप से फ़ाइल खोलता है और इसकी सामग्री को Response.OutputStream

पर भेजता है
3

क्या आपने "इनलाइन" की बजाय सामग्री-स्वभाव को "अनुलग्नक" पर सेट करने का प्रयास किया है? मुझे विश्वास है कि उसके बाद ब्राउजर को खोलने या दस्तावेज़ को बचाने के लिए उपयोगकर्ता का संकेत देगा।

इसके अलावा, आप आमतौर पर बाइनरीवाइट विधि के साथ सीधे प्रतिक्रिया ऑब्जेक्ट पर डेटाबेस से अपनी बाइट स्ट्रीम लिखकर फ़ाइल सिस्टम को बाईपास कर सकते हैं ... यह भी एक ऐसा मामला है जहां आप HTTP हैंडलर का उपयोग करके जांच करना चाहेंगे एक ASPX पेज ताकि आप रिस्पांस, आदि मैं पृष्ठ पर एक छिपा iframe का उपयोग करके के साथ अतीत में सफलता मिली है समाशोधन के बारे में चिंता है, तो जावास्क्रिप्ट का उपयोग करते हुए एक HTTP हैंडलर कि दस्तावेज़ लेता है करने के लिए अपने स्रोत सेट करने के लिए की जरूरत नहीं है QueryString पर एक पैरामीटर के रूप आईडी।

9

Response.AppendHeader ("सामग्री-विन्यास" के बजाय

, "inline;" + "फ़ाइल नाम =

उपयोग

Response.AddHeader (" सामग्री-स्वभाव: ", "लगाव; फ़ाइल नाम =

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