2014-09-07 12 views
5

मेरे पास एक एमवीसी प्रोजेक्ट है जहां मैं चाहता हूं कि उपयोगकर्ता एक बटन के क्लिक के साथ एक एक्सेल फ़ाइल डाउनलोड करने में सक्षम हो। मेरे पास फ़ाइल का पथ है, और मुझे Google के माध्यम से मेरा जवाब नहीं मिल रहा है।सर्वर से क्लाइंट को फ़ाइल कैसे डाउनलोड करें?

मैं एक साधारण बटन मैं अपने cshtml पेज पर है के साथ ऐसा करने में सक्षम होना चाहते हैं:

<button>Button 1</button> 

मैं यह कैसे कर सकते हैं? कोई भी मदद बहुत ही सराहनीय होगी!

उत्तर

11

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

@Html.ActionLink("Button 1", "Download", "SomeController") 

:

public ActionResult Download() 
{ 
    string file = @"c:\someFolder\foo.xlsx"; 
    string contentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"; 
    return File(file, controntType, Path.GetFileName(file)); 
} 

और फिर एक लंगर इस नियंत्रक कार्रवाई की ओर इशारा करते के साथ अपने बटन की जगह: यह आपके नियंत्रक कार्रवाई से एक FileResult लौटने File विधि का उपयोग कर प्राप्त किया जा सकता आप एक HTML फॉर्म का भी उपयोग कर सकते हैं:

@using (Html.BeginForm("Download", "SomeController", FormMethod.Post)) 
{ 
    <button type="submit">Button 1</button> 
} 

यदि फ़ाइल क्लाइंट फ़ोल्डर से कुछ गैर-सुलभ के अंदर स्थित है

string file = HostingEnvironment.MapPath("~/App_Data/foo.xlsx"); 
+0

क्या अगर फाइल अलग सर्वर में है? मान लें कि सर्वर का नाम "VUP-1" है? और कहें कि पथ "c: \ someFolder \ foo.xlsx" -> सर्वर VUP-1 में है –

2

एचटीएमएल:

<div>@Html.ActionLink("UI Text", "function_name", "Contoller_name", new { parameterName = parameter_value },null) </div> 

नियंत्रक: अपने आवेदन में इस तरह के App_Data के रूप में आप एक रिश्तेदार पथ का उपयोग इस फ़ाइल की पूर्ण शारीरिक पथ के निर्माण के लिए MapPath विधि इस्तेमाल कर सकते हैं

public FileResult download(string filename) { 
     string path = ""; 
     var content_type = ""; 
     path = Path.Combine("D:\file1", filename); 

     if (filename.Contains(".pdf")) 
     { 
      content_type = "application/pdf"; 
     } 
     return File(path, content_type, filename); 
} 
संबंधित मुद्दे