2012-12-13 82 views
0

我正在將一個靜態網站(使用「Plone」創建)轉換爲ASP.NET項目,並且它引用圖像的方式很奇怪,並且在ASP.NET中不起作用。在ASP.NET中處理無擴展圖像

的結構是這樣的:/images/image.png/image_thumb/images/image.png/image_tile

image.png是一個文件夾,image_thumbimage_tile的文件。我需要做什麼手動添加擴展到每個文件並引用它?

這裏是一個圖像是如何目前引用(在舊的靜態項目,但不是在ASP.NET作品):<img alt="Shallow Tiger" class="image-inline" height="300" src="/images/rm/ue147.JPG/image_preview" width="400" />

有什麼事情,我需要在Global.asax中做什麼?或web.config?或IIS?

+0

找到一種方法來自動化手動過程?使用[免費文件重命名程序(https://www.google.com/search?q=free+file+rename+program+for+windows)重命名的圖像,並使用正則表達式搜索和可視更換Studio來更改代碼中的'src'屬性。 –

+0

另外,它在ASP.NET中不起作用?你的意思是IIS?舊網站是否在Apache上運行?你能否在你的問題中澄清一下? –

回答

0

你有一個糟糕的設計,因爲IIS需要一些如何知道什麼樣的文件是,並使用圖像的擴展來做到這一點。隨着走出延伸你有一個替代加上global.asax一些代碼,由目錄篩選它:

protected void Application_BeginRequest(Object sender, EventArgs e) 
{ 
    HttpApplication app = (HttpApplication)sender; 
    string cTheFile = HttpContext.Current.Request.Path; 
    string sExtentionOfThisFile = System.IO.Path.GetExtension(cTheFile); 

    // if this is a file inside the directory images 
    // and did not have extention 
    if ( cTheFile.Contains("/images/", StringComparison.InvariantCultureIgnoreCase) 
     && sExtentionOfThisFile.Equals(".", StringComparison.InvariantCultureIgnoreCase) 
    ) 
    { 
     // then send the Content type of a jpeg (if its jpeg) 
     app.Response.ContentType = "image/jpeg"; 
    } 

} 

但我建議你,如果這是很容易恢復的圖像的擴展,並讓IIS處理ContentType和圖像的緩存集合。

代碼可能需要一些tweeks,因爲我沒有測試它,因爲它是。 此外,爲了使工作,你必須設置iis從asp.net文件擴展名。

0

如果你不能自動化你的出路,那麼我會建議你寫一個HTTP handler,它從磁盤讀取圖像,將字節寫入響應,並將適當的MIME類型添加到響應中。

您可以configure a handler在web.config中,這裏有一個例子:

<system.web> 
    <httpHandlers> 
    <add verb="GET" path="images/*" type="ExtensionLesssImageHandler, WebApplication1" /> 
    </httpHandlers>