2013-02-05 6 views
11

मैं सीधे अपने ब्राउज़र में एक पीडीएफ फाइल देखना चाहता हूं। मुझे पता है कि यह सवाल पहले से ही पूछा गया है लेकिन मुझे कोई समाधान नहीं मिला जो मेरे लिए काम करता है।सीधे मेरे ब्राउज़र में एक पीडीएफ फ़ाइल खोलना

यहाँ मेरी कार्रवाई के नियंत्रक कोड अब तक है:

public ActionResult GetPdf(string fileName) 
{ 
    string filePath = "~/Content/files/" + fileName; 
    return File(filePath, "application/pdf", fileName); 
} 

यहाँ मेरे विचार है:

enter image description here

:

@{ 
    doc = "Mode_d'emploi.pdf"; 
} 

<p>@Html.ActionLink(UserResource.DocumentationLink, "GetPdf", "General", new { fileName = doc }, null)</p> 

जब मैं माउस लिंक यहाँ मंडराना कड़ी है

मेरे कोड के साथ समस्या यह है कि पीडीएफ फ़ाइल में नहीं देखा गया है ब्राउज़र लेकिन मुझे एक संदेश मिलता है जो मुझसे पूछता है कि क्या मैं फ़ाइल खोलने या सहेजना चाहता हूं।

enter image description here

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

enter image description here

आप देख सकते हैं वहाँ से उत्पन्न लिंक में एक फर्क है:

उदाहरण के लिए, यहाँ जब मैं माउस एक लिंक (किसी अन्य वेबसाइट पर) मंडराना कड़ी है। मुझे नहीं पता कि यह उपयोगी है या नहीं।

कोई विचार मैं ब्राउज़र में सीधे अपने पीडीएफ को कैसे देख सकता हूं?

धन्यवाद। एक File लौटने का

+0

पहले से ही यहां उत्तर दिया गया है: http://stackoverflow.com/questions/3206682/stream-file-using-asp-net-mvc-filecontentresult-in-a-browser-with-a-name –

+0

धन्यवाद औरerson.pimentel , यह मेरी मदद की। – Bronzato

उत्तर

14

इसके बजाय, लौटने की कोशिश एक FileStreamResult

public ActionResult GetPdf(string fileName) 
{ 
    var fileStream = new FileStream("~/Content/files/" + fileName, 
            FileMode.Open, 
            FileAccess.Read 
            ); 
    var fsResult = new FileStreamResult(fileStream, "application/pdf"); 
    return fsResult; 
} 
+0

यह उत्तर गलत है। मेरा जवाब देखो। – ataravati

1

आप डेटाबेस छवि स्तंभ में संग्रहीत फ़ाइल को पढ़ने, तो आप इस तरह उपयोग कर सकते हैं:

public ActionResult DownloadFile(int id) 
{ 
    using (var db = new DbContext()) 
    { 
     var data = 
      db.Documents.FirstOrDefault(m => m.ID == id); 
     if (data == null) return HttpNotFound(); 
     Response.AppendHeader("content-disposition", "inline; filename=filename.pdf"); 
     return new FileStreamResult(new MemoryStream(data.Fisier.ToArray()), "application/pdf"); 
    } 
} 
8

इस के लिए अपने कोड को बदलें :

 Response.AppendHeader("Content-Disposition","inline;filename=xxxx.pdf"); 
     return File(filePath, "application/pdf"); 
14

स्वीकृत उत्तर गलत है। फ़ाइल को खोलने या सहेजने के लिए आपको एक संदेश मिलने का कारण यह है कि आप एक फ़ाइल नाम निर्दिष्ट कर रहे हैं। यदि आप फ़ाइल नाम निर्दिष्ट नहीं करते हैं तो पीडीएफ फाइल आपके ब्राउज़र में खोली जाएगी।

तो, तुम सब करने की जरूरत है यह करने के लिए अपनी कार्रवाई को बदलने के लिए है:

public ActionResult GetPdf(string fileName) 
{ 
    string filePath = "~/Content/files/" + fileName; 
    return File(filePath, "application/pdf"); 
} 

या, यदि आप एक फ़ाइल नाम निर्दिष्ट करने की आवश्यकता आप इसे इस तरह से करना होगा:

public ActionResult GetPdf(string fileName) 
{ 
    string filePath = "~/Content/files/" + fileName; 
    Response.AddHeader("Content-Disposition", "inline; filename=" + fileName);   

    return File(filePath, "application/pdf"); 
} 
+2

मेरे लिए ठीक काम करता है, धन्यवाद अटरावती। – Neo1779

0

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

return new PartialViewAsPdf("_JcPdfGenerator", pdfModel); 

आशा है कि यह किसी के लिए सहायक होगा।