我已经在运行.net MVC应用程序的Web服务器上设置了到另一台用于存储上载文件的服务器的网络路径。为了允许通过应用程序将文件上传到网络路径,我修改了IIS中的应用程序池,以便该应用程序有权上传到它。这一切都很好。
为了使应用程序在加载页面时能够读取文件,我在IIS中创建了一个虚拟目录,该目录现在作为IIS中该站点的文件系统的一部分出现。然后,如何在我的应用程序中访问并为此位置生成路径,以便可以将该路径传递给DB,然后将图像稍后加载到页面上?
假设我的路径是:
虚拟路径为useruploads / image.jpg
如何让我的应用程序识别我创建的虚拟路径?
或者,可以在IIS中删除虚拟目录,是否可以让我的应用程序直接访问Web服务器上的网络路径?
编辑-要添加到上面,我在iis中映射了网络路径,它在iis中显示在我的站点下,如下所示:
然后,我想使用?/ useruploads / file.jpg这样的地址从asp.net mvc应用程序内的此目录中读取。如果我可以让我的应用程序识别该虚拟目录,那么我将能够从中读取该目录。
编辑2号
好的,我认为我已经确定了问题的性质,并且更加清楚了。基本上,当我在网页上链接到该文件时,我访问的文件就很好。但是我在Chrome中收到消息"不允许加载本地资源"。我认为这只是Web浏览器不允许我加载图像的问题,因为页面上使用本地地址(网络路径)引用了该图像。因此,我现在试图在应用程序中创建一个操作以使用指向我的操作的Url.Action加载图像,然后将id转换为图像流,例如
在我看来:
其中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");
}
"为了让应用程序在加载页面时读取文件,我在IIS中创建了一个虚拟目录,该目录现在作为IIS中该站点的文件系统的一部分出现" –您可以解释一下;为什么要为文件存储区创建虚拟目录?您是否在从Web HDD或其他服务器HDD的ASP.net MVC应用程序中读取文件时遇到问题?
Web服务器上的网络路径来自另一台服务器,因此另一台服务器HDD作为Web服务器上的网络路径。我可以使用地址\ serverIP useruploads上传到它,但是我似乎无法使用相同的地址路径从中读取信息。我需要一个应用程序可以识别的路径,因此尝试在iis中为该应用程序添加虚拟目录,然后在这里询问是否有我的应用程序可以查看虚拟目录的方式,例如?/ useruploads / file.jpg,所以我可以在应用程序中这样引用它
我应该说,当我说读它时,是指使用通过应用程序的链接将图像加载到html页面上。因此,应用程序调用\ serverIP useruploads image.jpg作为数据库中图像的地址,但这会导致不允许在chrome中加载本地资源错误,并且不会在其他任何浏览器中加载。我真正需要的是至少将该网络路径映射到应用程序可以识别的虚拟地址。
添加新的VD并非可行的方法-您需要能够使用ASP.net MVC应用程序的应用程序池标识用户帐户读取其他服务器的UNC路径。这是一种非常常见的情况-您只需要分配正确的权限。
很公平。我确实有权使用在应用程序池中设置的帐户来读取该文件夹,我必须对其进行设置才能上传到该文件夹??。现在仔细检查文件夹,我可以看到我正在使用的帐户对文件夹的读/写等具有完全控制权。因此权限似乎不是问题。
使用server.MapPath()将相对URL映射到应用程序中的物理路径。
您好Codeunderflow,我不确定如何提供帮助,我的问题是该位置不是我的应用程序中的物理路径,而是该应用程序所在的Web服务器上的物理路径。我可以引用该物理位置很好,但是由于它是服务器上的本地路径,因此无法在浏览器中加载。因此,我需要以某种方式伪造其位置作为应用程序的一部分,或者做我认为已经解决的事情,即向我的应用程序中的控制器动作发送一个ID,该动作从网络路径获取文件并将图像流式传输到这一页。
@Rob我建议您在此周围放一些调试代码(1)您可以枚举UNC驱动器中的文件吗? (2)您要在枚举中查找的文件吗? (3)当您尝试以只读方式打开文件时,您得到一个错误,以及确切的错误代码是什么(即DOS错误2、5等)。您如何确定您的应用程序池帐户具有正确的权限并且可以看到该文件?通常,应用程序池帐户是非交互式的,您不能使用这些凭据登录。
您好菲利普,我已经更新了我的问题,因为我认为我已经确定了我的问题,这仅仅是因为即使我可以访问该地址,我也无法使用本地地址加载图像,因为浏览器不允许这样做。地址必须是某些东西。因此,我正在尝试我在问题中所说的,如果您能提供任何帮助,将不胜感激。
所以最后我的问题是我无法将图像放置在页面上,因为它使用的是服务器上的本地地址,出于安全原因,该地址在浏览器中是不允许的。 为了使用网络路径,我不得不使用
我认为此操作:
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);
}
然后,这将图像返回到页面,尽管这意味着该图像不会被缓存。