内容文件夹内文件的路径 (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 已知文件名,如何得到该文件的绝对路径。在线急等