我已经在运行 .net MVC 应用程序的 Web 服务器上设置了到另一台用于存储上传文件的服务器的网络路径。为了允许通过应用程序将文件上传到网络路径,我修改了 IIS 中的应用程序池,以便应用程序有权上传到它。这一切正常。
为了让应用程序在加载页面时读取文件,我在 IIS 中创建了一个虚拟目录,该目录现在作为 IIS 中该站点的文件系统的一部分出现。然后如何在我的应用程序中访问和生成此位置的路径,以便可以将该路径传递给数据库,然后在页面上加载图像?
假设我的路径是:
虚拟路径是 useruploads/image.jpg
如何让我的应用程序识别我创建的虚拟路径?
或者取消 IIS 中的虚拟目录,有没有办法让我的应用程序直接访问 Web 服务器上的网络路径?
编辑 - 要添加到上面,我在 iis 中映射了网络路径,它在 iis 中的我的站点下显示如下:
然后我想使用像 ~/useruploads/file.jpg 这样的地址从 asp.net mvc 应用程序中的这个目录读取。如果我能让我的应用程序识别这个虚拟目录,那么我将能够从中读取。
编辑 2
好的,我想我已经确定了我的问题的性质并且更加清晰。基本上,当我在网页上链接到该文件时,我可以正常访问该文件。但是,我在 chrome 中收到消息“不允许加载本地资源”。我相信这只是 Web 浏览器不允许我加载图像的问题,因为它在具有本地地址(网络路径)的页面上被引用。因此,我现在尝试在应用程序中创建一个动作,以使用 Url.Action 加载图像,指向我的动作,然后将 id 转换为图像流,例如
在我看来:
<img src="@Url.Action("image", "files", new { image = Model.image})" alt="name" />
其中 Mode.image 类似于 folder\image.jpg。
行动:
public FileResult image(string id)
{
var dir = @"\\SERVERNAME\upload\";
var path = Path.Combine(dir, id);
return base.File(path, "image/jpg");
}
所以最后我的问题是我无法将图像放置在页面上,因为它使用了服务器上的本地地址,出于浏览器的安全原因,这是不允许的。为了使用我不得不使用的网络路径
<img src="@Url.Action("image", "files", new { image = Model.image})" alt="name" />
我认为这一行动:
public FileResult image(string id)
{
var dir = @"\\SERVERNAME\upload\";
var path = Path.Combine(dir, id);
string contentType = MimeMapping.GetMimeMapping(path);
return base.File(path, contentType);
}
然后将图像返回到页面,尽管这意味着图像不会被缓存。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句