2012-07-02 34 views
1

我剛開始接觸ImageResizer和我卡在什麼似乎是完全基本問題:如何設置自定義ImageResizer網址?

  1. 我有,我用把圖片放到一個目錄,這不是通過HTTP直接訪問的上傳。 (如果我只是在/images/myimage.jpg上放置一個圖像,那麼任何人都可以通過請求來訪問它,而我想通過縮略圖,水印等來限制訪問)。所以我想把它放在/offlimits/myimage.jpg,但能夠在/public/images/myimage.jpg服務它。
  2. 我真的不想將所有圖像轉儲到同一個offlimits文件夾中,因爲將大量文件放在一個文件夾中會使Windows不快。但是我不想公開這個子目錄結構的細節,所以我在哪裏放置了面向公衆的url和實際圖像位置之間的映射關係?
  3. 通常,我不一定需要圖像擴展,所以我想說/public/image_id?width=100...並將此地圖設置爲/offlimits/sub1/sub2/sub3/image_id.jpg

任何人都可以建議如何設置?

回答

3

三部分構成的問題一般都在SO在這裏皺了皺眉頭,但我無論如何咬:)

  1. 如果您是根據認證允許訪問圖像,那麼你需要使用ASP.NET的URL授權功能。 ImageResizer支持URL授權規則。如果你只是不希望源文件可用,並且想強制它們調整大小或加水印,read the docs on how to implement arbitrary rules like this
  2. 您可以用Config.Current.Rewrite重寫您心中內容的圖像路徑,其工作方式與PostRewrite事件mentioned earlier類似。只要記住,你將不得不在晚些時候保持頭腦清醒。
  3. 圖像擴展是好東西。不要打他們。他們讓服務器找出正確的MIME類型發送並幫助錯誤的瀏覽器從相關的錯誤中恢復。它們可以防止幾個平臺上的問題,並使「另存爲」對話框起作用它們也顯着提高了服務器效率,因爲處理邏輯沒有等待很長時間。由於IIS/ASP.NET模塊系統的設計,這尤其相關。
+0

我想我想他們是同一個問題的方面(在URL重寫),但我想確定幾個不同的用例。在(3)上,我接受你的智慧,並堅持文件擴展名。 –

+0

關於(1)和(2),由於我寫了我的問題,因此我發現了Config.Current.Pipeline.Rewrite,現在我剛剛閱讀了您鏈接的文章,但我仍然無法想出它提供修改後的文件,但不允許直接訪問它們。你是說這些文件應該是應用程序可見的(例如,不在App_Data或其他不可見目錄中),但標記爲授權,ImageResizer將能夠處理已處理的版本,但試圖獲取源圖片將被禁止? –

+0

重寫和PostRewrite事件允許您通過有效地將原件顯示爲具有水印的最大允許尺寸來阻止訪問源文件。 –