内容文件夹内文件的路径 (ASP.NET MVC)

Posted

技术标签:

【中文标题】内容文件夹内文件的路径 (ASP.NET MVC)【英文标题】:Path To Files Inside Content Folder (ASP.NET MVC) 【发布时间】:2011-07-22 00:10:44 【问题描述】:

关于 Content 文件夹在 ASP.NET MVC 中的工作原理,我仍然不明白。为了让事情更清楚,我有几个问题:

    Content 文件夹是根文件夹吗?我的意思是http://localhost/ 指向内容还是其他? 我在 Content/images/temp 文件夹中有一个名为 dummyIcon.png 的文件。如何从我的领域层(代码库项目)中找到它? 在 ASP.NET MVC 中显示图像的最佳实践是什么?我应该在数据库中存储图像的路径(我个人更喜欢),还是保存一个字节数组并将其返回给视图?

我发现以下链接在 MVC Web 应用程序的上下文中很有帮助,但我仍然希望能回答上面发布的问题。谢谢。

Can an ASP.NET MVC controller return an Image?

how to display image using view and controller by ASP.NET MVC

【问题讨论】:

【参考方案1】:

    如果你的路由忽略了根目录中的任何东西,它都会指向根目录:

    如果您有一个图像放在项目的根目录上。然后,说http:://localhost/dummy.ico" 会给你一个 404,找不到控制器。 直到您在global.asax.cs 中执行此操作:

    routes.IgnoreRoute("dummy.ico");
    //you could add wildcards here to match different things
    

    如果您使用“代码”File.Open();,您需要文件的物理路径。你可以这样理解:

    string filePath = Server.MapPath(Url.Content("~/Content/Images/Image.jpg"));
    

    这取决于您,尽管我想说,如果您希望将所有内容都集中在一个位置,将文件放入数据库非常有意义。如果您需要移动您的应用程序,您只需移动数据库即可。

当涉及到文件路径时,请记住您不想重复文件名,因此您必须给每个文件一个GUID,然后将其链接起来。如果您有大量文件(或大文件本身),这可能是有意义的,这样您的数据库就不会像疯了一样增长。

HTH

【讨论】:

+1 获取有关使用 GUID 的提示。我忘记了。是的,会有很多图片上传到网站。该网站是一个拍卖网站,用户最多可以上传 3 张他们发布的物品的图片。我没看懂你的最后一句话,你说的是把图片放在数据库里还是放在目录里? @Kassem 就像我说的,这取决于您的大量文件,我会说将文件全部存储在一个文件夹中,并带有名称的 guid,并且在您的数据库中您不存储路径。您仅存储 GUID,因此迁移、移动会更容易。 (如果您的图像很小/或数量很少,将它们填充到数据库中是有意义的,这就是我的意思)【参考方案2】:

1.Content文件夹是根文件夹吗? 我的意思是http://localhost/ 是否指向 内容还是其他?

不,http://localhost:port/ 不指向内容文件夹。您可以通过http://localhost:port/content/...访问内容文件夹中的文件...

2.我有一个名为 dummyIcon.png 的文件 在 Content/images/temp 文件夹中。如何 我是否从我的域层中找到它 (这是一个代码库项目)?

您应该能够以http://localhost:port/Content/images/temp/dummyIcon.png 的身份访问它

3.什么是最佳实践 在 ASP.NET MVC 中显示图像? 我应该将图像的路径存储在 数据库(我个人 更喜欢),或者我保存一个字节数组和 将其返回视图?

存储图像的位置取决于您的应用程序需求。这些是用于显示应用程序图像(图标、公司徽标等)的通用图像吗?那么最好将它们存储在文件系统中。

如果您的应用程序处理图像并且您致力于存储图像、操作等,那么您可能需要 DB。我认为,存储在 Web 应用程序上使用的图像是一种开销。

【讨论】:

哦,这是我丢失的端口号!感谢您指出了这一点! :) 而且我也忘记使用 AutoMapper 映射路径。现在我把这一切都解决了!但是关于将图像存储在数据库中,这不会使数据库的大小急剧增加吗? 是的。这是一个你必须考虑的权衡。有很多关于在数据库中存储 imgs 的文章/辩论。你应该谷歌一些【参考方案3】:

你应该为你的控制器创建一个模型对象来返回。在此示例中,我返回 SearchPageModel,这是我创建的一个类。但是假设这个对象有一个名为 imageURL 的属性

但要确保控制器实际返回一个 ActionResult

例如...

    [AcceptVerbs(HttpVerbs.Get)]
    public ActionResult Search()
    
        SearchPageModel Model = new SearchPageModel();

        // populate the Model properties
        Model.ImageURL = "myjpeg"

        return View("Search", Model);
    

然后我将此模型对象传递回我想要的视图,在这种情况下是我的“搜索”视图

为了显示图像,我会在视图中添加..

<img src="Images/<%=Model.ImageURL %>.jpg" />

【讨论】:

是的,这就是我正在做的。但这不是我的问题。我要的是如何将路径映射到我的代码中的图像,然后将其存储在数据库中。或者,如果有一些图标永远不会改变,我可以将它存储在 Content/images/icons 文件夹中并从视图中检索它。 我将始终存储在文件系统中并使用数据库来保存路径

以上是关于内容文件夹内文件的路径 (ASP.NET MVC)的主要内容,如果未能解决你的问题,请参考以下文章

asp.net mvc 已知文件名,如何得到该文件的绝对路径。在线急等

ASP.NET MVC 4 (一)路径映射

在 asp.net mvc 中映射物理文件路径

ASP.NET MVC 4 (一)路径映射

如何在 ASP.NET MVC3 中通过 HTTPS 提供静态文件(在 ~/Content 中)

ASP.NET MVC 路由:绕过路径的静态文件处理程序