2012-09-25 17 views
10

के बाहर यूआरएल को देखने के लिए src property सेट करें, मैं एक ऐसा एप्लिकेशन बनाने की कोशिश कर रहा हूं जो वेबसर्वर पर स्थानीय रूप से संग्रहीत छवियों को प्रदर्शित करेगा। मेरे विचार में मेरे पास यह है, ध्यान दें कि "प्रविष्टि" "C:\Images\Image1.jpg" जैसे पूर्ण पते हैं। हालांकि, जब मैं इसे चलाता हूं, तो मुझे कंसोल लॉग में "Not allowed to load local resource: file:///C:/Images/ImageName.jpg" मिलता है। तो शायद यह ग्राहक पर छवि तक पहुंचने का प्रयास करता है। स्थानीय वेबसर्वर पथ तक पहुंचने के लिए मैं अपने विचार को कैसे बताऊं और क्लाइंट पर छवि स्रोत की तलाश नहीं कर सकता? कृपया ध्यान दें कि प्रोजेक्ट निर्देशिका में छवियों को स्थानांतरित करना एक विकल्प नहीं है, क्योंकि छवियों को वेबसर्वर पर एक अलग ड्राइव पर संग्रहीत किया जाता है।एमवीसी 3 प्रोजेक्ट

<!-- language: c# --> 
@model List<String> 
<div style="height: 500px; overflow:scroll;"> 
<h2> 
    ScreenShots for testMachine</h2> 

@foreach (var entry in Model) 
{   
    <div class="nailthumb-container square-thumb"> 
    <img alt="screenshot" src="@Url.Content(entry)" /> 

</div> 
} 
</div> 

उत्तर

18

आप क्लाइंट को सीधे अपने एएसपी.नेट एमवीसी 3 एप्लिकेशन के बाहर छवियों की सेवा नहीं कर सकते हैं। यदि ग्राहक आपके सर्वर पर मनमानी फ़ाइलों तक पहुंच सकता है तो यह एक बड़ी सुरक्षा भेद्यता होगी।

आपको एक नियंत्रक कार्रवाई लिखनी होगी जो उन्हें वापस कर देगी और फिर अपने <img> टैग की इस नियंत्रक कार्रवाई में src गुण इंगित करेगी।

public class ImagesController: Controller 
{ 
    public ActionResult SomeImage() 
    { 
     return File(@"C:\Images\foo.jpg", "image/jpeg"); 
    } 
} 

और आपके विचार के अंदर:

public class ImagesController: Controller 
{ 
    public ActionResult SomeImage(string imageName) 
    { 
     var root = @"C:\Images\"; 
     var path = Path.Combine(root, imageName); 
     path = Path.GetFullPath(path); 
     if (!path.StartsWith(root)) 
     { 
      // Ensure that we are serving file only inside the root folder 
      // and block requests outside like "../web.config" 
      throw new HttpException(403, "Forbidden"); 
     } 

     return File(path, "image/jpeg"); 
    } 
} 

और अपने ध्यान में रखते हुए:

<img src="@Url.Action("SomeImage", "Images", new { image = "foo.jpg" })" alt="" /> 

<img src="@Url.Action("SomeImage", "Images")" alt="" /> 

तुम भी छवि नाम पैरामीटर के रूप में नियंत्रक कार्रवाई करने के लिए दे सकते हैं

+0

मैं एमवीसी 3 के लिए बहुत नया हूं, यह कैसा दिखता है? – Alicester4WonderlandPresident

+0

यह एक फ़ाइलरसल्ट लौटने वाले नियंत्रक कार्रवाई की तरह दिखेगा। मेरा अद्यतन उत्तर देखें। –

+0

यह एक आकर्षण की तरह काम किया, धन्यवाद। – Alicester4WonderlandPresident

0

उपरोक्त कोड मेरे लिए उपयोगी था, , लेकिन मैं के रूप में "TableErrorLog.csv फ़ाइल नाम चाहते हैं, इस

System.Web.UI.Page page = new System.Web.UI.Page(); 
string filePath = page.Server.MapPath("~/Log/" + fileName); 

     if (!filePath.StartsWith(filePath)) 

     { 

      throw new HttpException(403, "Forbidden"); 
     } 

     return File(filePath, "Content-Disposition", "attachment;filename=TableImportLog.csv"); 

की तरह एक परिवर्तन} के साथ

उपयोगकर्ता के लिए फेंक दिया फ़ाइल

इस तरह फ़ाइल नाम के साथ है" फ़ाइल नाम = TableImportLog.csv लगाव " " इसके लिए मदद की ज़रूरत है!