2009-08-26 15 views
8

में फ़ाइल डाउनलोड को कार्यान्वित करने के लिए कैसे मैं in other Stack Overflow question जैसे मानक ASP.NET फ़ाइल डाउनलोड प्रतिक्रिया का उपयोग करना चाहता हूं।एएसपी.NET AJAX

Response.ContentType = "application/octet-stream"; 
Response.AppendHeader("Content-Disposition","attachment; filename=logfile.txt"); 
Response.TransmitFile(Server.MapPath("~/logfile.txt")); 
Response.End(); 

लेकिन अद्यतन पैनल के अंदर यह काम नहीं करता है। मुझे क्या करना है, अगर अपडेट पैनल के अंदर डाउनलोड इवेंट ट्रिगर किया गया है तो मुझे एक फाइल मिल जाएगी?

+0

मुझे उत्सुकता है कि आप केवल उस फ़ाइल को इंगित करने वाले यूआरएल का निर्माण क्यों नहीं करते हैं जिसे आप क्लाइंट को पेश करना चाहते हैं, और ब्राउज़र को अपनी फ़ाइल डाउनलोड करने के लिए उपयोग करने के लिए दें। ? – 7wp

+0

यह एक txt फ़ाइल है, जो आमतौर पर सीधे ब्राउज़र में दिखाया जाएगा। यदि सामग्री प्रकार "एप्लिकेशन/ऑक्टेट-स्ट्रीम" पर सेट है, तो मुझे लगता है कि ब्राउज़र इसके बजाय डिस्क पर डाउनलोड शुरू करेगा। – awe

+0

अच्छी तरह से "txt" फ़ाइल सिर्फ एक उदाहरण है। और यह सीधे ब्राउज़र में प्रदर्शित नहीं होता है। इस प्रतिक्रिया के साथ यह हमेशा डाउनलोड करने योग्य है। –

उत्तर

10

ठीक है, मुझे एन्कोसिया पर अच्छा ब्लॉग पोस्ट मिला है जो इस एएसपी.NET AJAX फ़ाइल डाउनलोड समस्या का समाधान बताता है। यह वास्तव में अच्छा काम करता है।

http://encosia.com/2007/02/23/ajax-file-downloads-and-iframes/

2

आपको इसे एक अलग एएसपीएक्स में रखना होगा जो AJAX का उपयोग नहीं करता है। अजाक्स क्लाइंट साइड पर किसी पेज पर मौजूदा एचटीएमएल मार्कअप अपडेट कर रहा है। क्लाइंट को कुछ भी भेजने से पहले आप यहां क्या प्रयास करते हैं, सर्वर सर्वर पर responce सामग्री को प्रतिस्थापित करता है।

आप इस कोशिश कर सकते:

एक पेज Download.aspx कहा जाता है कि संचारित कोड आपके पास पहले से शामिल है।

अपने वास्तविक पृष्ठ में, आप एक javascript कॉल है कि इस तरह डाउनलोड पृष्ठ कॉल:

window.location.replace('Download.aspx'); 
0

आप एक हैंडलर बनाने के लिए इस work.It आप अच्छी तरह से संशोधित कर सकते हैं, तो अधिक सुरक्षित है कोशिश कर सकते हैं। इस काम के लिए, आपको अपने पृष्ठ में फ़ाइल पथ एन्क्रिप्ट करना होगा जहां आपने फ़ाइल के लिए एक लिंक डाला था।

<a href=\"Downloads.ashx?f={0}\" target=\"_blank\">Your link to file</a> 
//{0} -> Encrypted file path 
//target = _blank force browser to download file in another window 

here

में एन्क्रिप्शन तकनीक के बहुत सारे अपने हैंडलर पेज में हैं, आप मूल में फ़ाइल पथ डिक्रिप्ट करने के लिए ताकि आप इसे System.IO पुस्तकालयों के साथ पढ़ सकते हैं की जरूरत है।

context.Response.ContentType = ""; //-->MimeType for your file's extension 

आप रजिस्ट्री द्वारा अपना माइम टाइप निर्दिष्ट कर सकते हैं जब तक कि आपका माइम-प्रकार छवियों के रूप में स्थिर न हो।

string mimeType = Registry.GetValue(string.Format(@"HKEY_CLASSES_ROOT\.{0}", 
        Path.GetExtension(decryptedfilePath)), "Content Type", null).ToString(); 

//Then everything is ready for download 

byte[] buffer = File.ReadAllBytes(decryptedfilePath); 
context.Response.OutputStream.Write(buffer, 0 , buffer.Length); 
context.Response.Flush(); 

शुभकामनाएँ।

0

मैं एक जावास्क्रिप्ट समारोह, जो कोई __EVENTTARGET साथ __doPostBack कॉल को फोन करके इस हल करने में सक्षम था।

function GxGridView_Export(exportLink, exportType) { 
    var containingGrid = $(exportLink).closest("table .GxGridViewWithSlider"); 
    __doPostBack('', containingGrid.attr('id') + "###" + exportType); 
} 

सर्वर पक्ष ग्रिड फिर __EVENTARGUMENT को पार करता है और निर्यात फ़ाइल प्रस्तुत करता है।

var eventArg = Page.Request.Form["__EVENTARGUMENT"]; 
if (!string.IsNullOrEmpty(eventArg) && eventArg.Contains("###")) 
{ 
    var eventParams = eventArg.Split(new string[] { "###" }, StringSplitOptions.RemoveEmptyEntries); 
    if (eventParams.Length == 2 && eventParams[0] == this.ClientID) 
    { 
     ExportGrid(eventParams[1]); 
     return; 
    } 
} 
+0

मैंने शुरुआत में ग्रिड आईडी को ईवेंट लक्ष्य के रूप में पास करने का प्रयास किया था, लेकिन डूपोस्टबैक किसी भी तरह से यह जानकर काफी समझदार था कि यह AJAX पैनल के अंदर एक नियंत्रण है, और इसके बजाय मेक और अजाक्स पोस्टबैक है। –