2012-03-27 10 views
9

मुझे अपने सर्वर पर AJAX अनुरोध मिला है जहां मैं एक पीडीएफ फाइल बना रहा हूं। अब मैं इस फाइल को एक नई विंडो/टैब में प्रदर्शित करना चाहता हूं या बस इसे डाउनलोड करना चाहता हूं। मैं उसे कैसे कर सकता हूँ?AJAX अनुरोध में पीडीएफ वापस

मेरे अनुरोध

$.ajax({ 
    url: '/Document/CreatePDF', 
    type: 'POST', 
    data: { 
     docid: documentId, 
     dataId: array 
    }, 
    traditional: true, 
    success: function (data) { 
    } 
}); 

    [HttpPost] 
    public FileStreamResult CreatePDF(long docid, List<long> dataId) 
    { 
     var document = _rep.LoadDocument(docid.ToString(), Server.MapPath("~/Documents/") + docid + ".xml"); 

     var exporter = new PDFExporter(document); 

     MemoryStream fileStream = exporter.CreatePDF(); 
     byte[] PdfByte = fileStream.GetBuffer(); 
     fileStream.Flush(); 
     fileStream.Close(); 

     HttpContext.Response.AddHeader("content-disposition","attachment; filename=form.pdf"); 

     return new FileStreamResult(fileStream, "application/pdf"); 
    } 
+0

मुझे लगता है कि आपको या तो सर्वर पर एक सामान्य फॉर्म भेजना चाहिए या बनाए गए पीडीएफ-दस्तावेज़ में एक पता वापस भेजना चाहिए जो जावास्क्रिप्ट ब्राउज़र को एक नई विंडो में अग्रेषित कर सकता है ... –

+0

सामान्य समाधान: यह मेरे लिए काम करता है (पीडीएफ एक बाइट [] से एक एमवीसी-एजेक्स कॉल के माध्यम से मोडल संवाद) kamgman

उत्तर

12

आप फ़ाइलों को डाउनलोड करने AJAX का उपयोग नहीं कर सकते हैं। इसका कारण यह है कि जावास्क्रिप्ट आपको क्लाइंट कंप्यूटर पर डाउनलोड की गई सामग्री को सहेजने की अनुमति नहीं देता है, न ही एक सेव संवाद के लिए संकेत देता है। तुम एक साधारण HTML <form> या एक लंगर का उपयोग करना चाहिए:

@using (Html.BeginForm("CreatePDF", "Document", FormMethod.Post, new { id = "myform" })) 
{ 
    <button type="submit">Download</button> 
} 

आप गतिशील छिपा इंजेक्षन इस नियंत्रक कार्रवाई है कि ग्राहक आप इस फार्म के .submit घटना की सदस्यता सकता है और उसके बाद से ही जाना जाता है के लिए तर्क पारित करने के लिए की जरूरत है इसमें संबंधित मानों के साथ फ़ील्ड करें और फिर डिफ़ॉल्ट क्रिया निष्पादन छोड़ दें। और यदि सर्वर सर्वर पर मान ज्ञात हैं तो आपको उन छिपे हुए फ़ील्ड जेनरेट करने के लिए बस HTML मददगार का उपयोग करना चाहिए।

+0

@ डेरिन डिमिट्रोव एक एंकर का उपयोग करने के किसी भी अच्छे उदाहरण ?? –