我是.NET框架的新手,我想知道提供静态内容和访问用户生成内容的最佳方式是什么。
假设我有以下文件:
logo.jpg
document.pdf
etc.doc
我应该把它放在哪里(在哪个文件夹上)?我如何访问它?
最后,把它带到另一个层面。假设我有一个允许用户上传文件的网络应用程序(比如说一些照片)。我想知道的是我的文件夹/目录的结构应该如何?
在django / CI中,我会有一个文件夹如下:应用/ {全web应用程序相关的文件夹和文件,进入-这里} 上传/ {所有相关的用户生成内容 - 去 - 在这里,分类按文件类型} 资产/ {CSS-JavaScript的文档将-GO-这里}
注意:我没有做任何事情或做过任何尝试。仅仅因为我不知道如何访问try静态内容。我曾经尝试访问位于Content / Scripts文件夹中的* .css或* .js文件。
即:localhost:12345 / Scripts / jquery.js
事实证明,它不是ASP.NET MVC中的直接过程
哦顺便说一下, 在某些场合,我还想从我的css文件中访问我的图片。这给我带来了另一个困惑。
编辑1:我阅读了以下文章
http://www.c-sharpcorner.com/uploadfile/dhananjaycoder/working-with-images-in-Asp-Net-mvc-framework/
然而它不适用于我当前版本的MVC(我正在使用MVC 5)
编辑2 :所以,这是我到目前为止一直在试验的内容
然后我想直接从我的观点访问这些文件,我会这样:
img src =" @ Url.Content("〜/ Asset / images / picture.png")"
如果我想访问图像文件,上面的示例是合适的。
但我不确定这是否是理想的做法。然而,这是我目前可以遇到的最简单的解决方案(或者我应该说,相当天真)。
任何提示都将不胜感激。
答案 0 :(得分:0)
假设我有以下文件:logo.jpg,document.pdf等.doc,我应该放在哪里(在哪个文件夹上)?以及我如何访问它?
您在EDIT 2上所做的一切都很好。 MVC框架足够聪明,可以禁用字典浏览。如果您尝试资产/assets/
或/assets/images
,则将获得403。
此外,即使您有一个名为“ assets”的控制器,一个名为“ images”的方法以及一个字符串ID为“ picture.png”的请求,该请求也不会到达该控制器方法。相反,它将仍然为您提供图像文件。看起来MVC优先于它找到的静态文件,而不是MVC路由?
假设我有一个网络应用程序,允许用户上传文档(比如说一些图片)。我想知道的是文件夹/目录的结构应该如何?
如果您打算仅将用户的上载作为物理文件存储在应用程序中(而不是将其保存到持久性存储中),则可以在根目录上创建一个文件夹,例如“ uploads”,并将其上载到那里。
我会通过ID(希望它是一个GUID而不是整数ID)将其上传内容分离到“上传”下的不同子文件夹中,以防万一当您要在前端显示上传路径时,用户无法轻松猜测其他用户的上传位置:
// assets
// uploads
// xxxx-xxxx-xxxx-xxxx
// files
// xxxx-xxxx-xxxx-xxxx
// files
不要忘记在将应用程序发布到的服务器上设置此上载文件夹的权限。
在某些情况下,我还想从css文件访问图像。
在这种情况下,您将必须使用相对URL,并且MVC的根默认为~/Content
。例如,假设您要使用保存在/ assets / images /下的picture.png作为块的背景图片:
#test-block {
width: 250px;
height: 250px;
background-image: url(`~/assets/images/picture.png`);'
background-size: cover;
}
您认为它可以正确访问图片并将其用作块的背景。但实际上,它会生成如下内容:
background-image: localhost/content/~/assets/images/picture.png
这真是令人讨厌,因为您必须使用../
而不是~/
手动返回一级来抓取图像:
background-image: url(`../assets/images/picture.png`);'
对我来说,这不是一个可以接受的解决方案,如果将应用程序发布到服务器上的虚拟文件夹(而不是wwwroot),那么它将很麻烦。
对于设置这样的背景图像,我宁愿在@Url.Content()
的帮助下使用内联样式,因为我不必担心它们的路径如何相互关联:
<div id="test-block"
style="background-image: url('@Url.Content("~/assets/images/picture.png")');">
</div>
答案 1 :(得分:-3)
ASP.NET MVC默认允许静态文件服务。而不是使用@ URL.Content直接写入以/表示根文件夹
开头的路径<img src="/Asset/images/picture.png" />