c# - Extjs अजाक्स फ़ाइल डाउनलोड अनुरोध सी#MVC




ajax get (2)

कुछ खोज के बाद, मुझे पता चला कि location.href एक ही बात करता है और एक डाउनलोड संवाद बॉक्स खोलता है। सर्वर से आने वाले प्रतिक्रिया में एक ही शीर्षलेख जोड़ा जाना चाहिए। हालांकि, मुझे अब भी पता नहीं है कि अन्य दृष्टिकोण क्यों काम नहीं करता है

var feed_id = this.getMyfeedwindow().down('form').getComponent('FeedId').text;
location.href = '/Feed/Download?fileID=' + feed_id;

यह मेरी समस्या हल।

मैं ग्राहक को अपने डीबी पर संग्रहीत एक फाइल डाउनलोड करने के लिए चाहता हूं जब बटन क्लिक किया जाता है मैं इस अजाक्स अनुरोध को भेजता हूं और इसे सर्वर साइड से लेता हूं

ExtJS:

downloadFile: function (a, b, c) {
    var feed_id =this.getMyfeedwindow().down('form').getComponent('FeedId').text;
    Ext.Ajax.request({
        url: '/Feed/Download',
        method: 'GET',
        params: {
            fileID: feed_id, //this.form.getComponent('file').value,
        },
        failure: function (response) {
            alert('failed  !');
        },
        success: function (response) {
            alert('success!');
        },
    });
},

तो इस कोड ब्लॉक के साथ अनुरोध को पूरा करें।

सी#:

 public void Download(string fileID){
    Response.ContentType = "application/force-download";
    Response.AddHeader("Content-Disposition", "attachment; Filename=\"Logo1.jpg\"");
    Response.BinaryWrite(data);
    Response.End();
 }

जब मैंने फायरबग के साथ नेटवर्क की जांच की, तो ऐसा लगता है कि मेरा अनुरोध इन पैरामीटरों के साथ सफलतापूर्वक लौटाता है।

Cache-Control   private
Content-Disposition attachment; filename="Logo1.jpg"
Content-Type    application/force-download
Date    Wed, 09 Jan 2013 12:51:54 GMT
Server  Microsoft-IIS/8.0
Transfer-Encoding   chunked
X-AspNet-Version    4.0.30319
X-AspNetMvc-Version 4.0
X-Powered-By    ASP.NET
X-SourceFiles   =?UTF-8?B?RTpcVXRrdUNhblxQcm9qZWN0c1xURlNcQlRPTVxCVE9NXEZlZWRcRG93bmxvYWQ=?=

यद्यपि यह सफल देता है, डाउनलोड प्रारंभ नहीं होता है। मैंने बहुत सारे सवाल और लेख पढ़ा लेकिन अधिकांश उत्तर कहते हैं कि बल-डाउनलोड हेडर समस्या को हल करता है मुझे किस बात की याद आती है? धन्यवाद।


एक डाउनलोड को संभालने के लिए आपको दिए गए सहायक में से एक का उपयोग करना चाहिए

  • System.Web.MVC.FilePathResult
  • System.Web.MVC.FileStreamResult
  • System.Web.MVC.FileContentResult

अधिकांश समय मैं System.Web.MVC.FileStreamResult का उपयोग कर रहा हूँ Iself इसे पसंद करें

FileStreamResult result = new FileStreamResult(stream, contentType);
result.FileDownloadName = filename; // name of the downloaded file

अपने संपादन के आधार पर बस कुछ इन्फोस अपडेट करें

आप XHR अनुरोध का उपयोग करके डाउनलोड शुरू नहीं कर सकते। लेकिन कम से कम दो तरीके हैं कि आप यह कैसे कर सकते हैं:

  • यदि फ़ाइल पथ ठीक है और आपको पता है कि यह शीर्ष सेट है। top.location.href = "YourPath"; एजेक्स कॉल की सफलता के हैंडलर के भीतर [ Top.location.href के बारे में इन्फोस ]
  • यदि आप फ़्लाई पर फाइल बनाते हैं और इसे वापस करना चाहते हैं तो आपको एक छिपी हुई आइफ्रेम बनाना चाहिए और उसमें एक प्रपत्र डालना चाहिए, फिर अनुरोध को निष्पादित करना चाहिए।




download