2011-01-13 93 views
2

所以我有一些麻烦,从项目文件夹外显示图片...显示图片

我似乎只能以“〜”目录中访问图像和子目录...

说,如果我想从“E:/ XYZ/11-01-01新年/”或类似的东西访问图像,我该怎么做?

注:我设置的所有文件夹和子文件夹为可读权限为“所有人”,所以IIS/Visual Studio中应该可以,但没有显示

+1

你试过了哪些代码?你得到了哪些错误/异常? – 2011-01-13 20:06:20

+1

最简单的方法是在IIS中设置一个虚拟目录,但通常这意味着URL可以在没有任何验证检查的情况下公开访问。如果您想要根据登录状态/角色控制对文件的访问,或者想要执行自定义日志记录,那么您需要使用IHTTPHandler路径。 – 2011-01-13 22:48:19

+0

@pauli:没有错误,因为图像控件不会抛出错误...他们只是保持空白。 – 2011-01-15 06:56:35

回答

5

您应该使用在图像控制图像HttpHandler来显示图像。

谷歌搜索“httphandler图像”找到了很多关于如何做到这一点的例子。

而不是试图直接链接到你的图像,你会链接到与查询字符串决定哪个图像显示的处理程序。例如

http://mysite.com/MyHandler.ashx?image=myimage.jpg 

这里是一个非常基本的样品(减去错误处理等)

using System.IO; 
using System.Web; 
public class MyImageHandler : IHttpHandler 
{ 
    public void ProcessRequest(System.Web.HttpContext ctx) 
    { 

     string _Path; 

     _Path = "E:\\XYZ\\11-01-01 New Year\\" + context.Request.QueryString["image"]; 

     ctx.Response.StatusCode = 200; 
     ctx.Response.ContentType = "image/jpeg"; 
     ctx.Response.WriteFile(_Path);  
    } 

    public bool IsReusable { get {return true; } }   
} 
2

客户端浏览器将永远不知道这些图片是,除非你映射一个虚拟目录的图像。在您的本地测试环境中,您可以通过将该映像称为“file:///E:/XYZ/11-01-01 New Year/myimage.jpg”来解决此问题,但这是非常糟糕的做法,并且在生产环境中将无法工作。您应该始终在应用程序的工作目录中使用相对路径,或者在其他位置使用静态定义的虚拟目录。