如何使用 asp.net mvc 应用程序从服务器上的网络路径中读取
How can I read from a network path on my server using asp.net mvc application
我已经在 Web 服务器上设置了网络路径 运行 .net MVC 应用程序到另一台用于存储上传文件的服务器。为了允许通过应用程序将文件上传到网络路径,我修改了 IIS 中的应用程序池,以便应用程序有权上传到它。这一切都很好。
为了让应用程序在加载页面时读取文件,我在 IIS 中创建了一个虚拟目录,它现在显示为 IIS 中该站点的文件系统的一部分。然后我如何在我的应用程序中访问并生成该位置的路径,以便可以将该路径传递给数据库,然后将图像加载到页面上?
假设我的路径是:
虚拟路径是useruploads/image.jpg
如何让我的应用程序识别我创建的虚拟路径?
或者取消 IIS 中的虚拟目录,有没有办法让我的应用程序直接访问 Web 服务器上的网络路径?
编辑 - 要添加到上面,我在 iis 中映射了网络路径,它在 iis 中显示在我的站点下,如下所示:
然后我想使用像这样的地址 ~/useruploads/file.jpg 从 asp.net mvc 应用程序内的这个目录读取。如果我能让我的应用程序识别这个虚拟目录,那么我就可以从中读取。
编辑 2
好的,我想我已经确定了我的问题的性质并且更加清楚了。基本上,当我在网页上 link 时,我可以很好地访问该文件。但是我在 chrome 中收到消息 'not allowed to load local resource'。我相信这只是网络浏览器不允许我加载图像的问题,因为它在具有本地地址(网络路径)的页面上被引用。因此,我现在正尝试在应用程序中创建一个操作,以针对我的操作使用 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);
}
然后 returns 图像到页面,尽管这意味着图像不会被缓存。
我已经在 Web 服务器上设置了网络路径 运行 .net MVC 应用程序到另一台用于存储上传文件的服务器。为了允许通过应用程序将文件上传到网络路径,我修改了 IIS 中的应用程序池,以便应用程序有权上传到它。这一切都很好。
为了让应用程序在加载页面时读取文件,我在 IIS 中创建了一个虚拟目录,它现在显示为 IIS 中该站点的文件系统的一部分。然后我如何在我的应用程序中访问并生成该位置的路径,以便可以将该路径传递给数据库,然后将图像加载到页面上?
假设我的路径是:
虚拟路径是useruploads/image.jpg
如何让我的应用程序识别我创建的虚拟路径?
或者取消 IIS 中的虚拟目录,有没有办法让我的应用程序直接访问 Web 服务器上的网络路径?
编辑 - 要添加到上面,我在 iis 中映射了网络路径,它在 iis 中显示在我的站点下,如下所示:
然后我想使用像这样的地址 ~/useruploads/file.jpg 从 asp.net mvc 应用程序内的这个目录读取。如果我能让我的应用程序识别这个虚拟目录,那么我就可以从中读取。
编辑 2
好的,我想我已经确定了我的问题的性质并且更加清楚了。基本上,当我在网页上 link 时,我可以很好地访问该文件。但是我在 chrome 中收到消息 'not allowed to load local resource'。我相信这只是网络浏览器不允许我加载图像的问题,因为它在具有本地地址(网络路径)的页面上被引用。因此,我现在正尝试在应用程序中创建一个操作,以针对我的操作使用 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);
}
然后 returns 图像到页面,尽管这意味着图像不会被缓存。