2012-07-02 32 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事件允许您通过有效地将原件显示为具有水印的最大允许尺寸来阻止访问源文件。 –