2012-08-15 77 views
2

我正在创建我的网站模块,可以在“相册”中显示图像,非常像Facebook。哪里存储相册的图像?

对于存储/分组图像,我计划在我的应用程序的结构内部的~/Images文件夹中有他们。这被认为是不好的做法,还是会打开我的应用程序的任何安全漏洞?我读过你不应该在你的网站结构中放置这样的东西,但我不太明白为什么(或者如果这是相同的情况)。

因此,专辑将被归类为...

~/Images/album1~/Images/album2

这是一个合适的东西放到里面App_Data,或者是有这样的事更“首选”的位置这样?

很抱歉,如果这是一个很小的问题。

+1

这些答案都没有回答你的问题吗? – Dorian 2012-08-30 12:56:46

回答

1

地图到您的网站的~\Albums\这三个答案都很好。上传的图像没有首选存储空间,根据您的要求,完全取决于您。

由于Henhealg says,不要将它们存储在App_Data文件。如果你把它们放在这里,它们将无法通过网络访问。例如,下面将不会渲染的图像即使路径是正确的:

<img src="/App_Data/album1/image1.png" alt="" /> 

一种选择是具有本地〜/相册目录映射到Web服务器,like sylon says访问不同的文件夹。这使得图像不在您的MVC应用程序所在的目录中,而是“假装”它们在那里。如果你控制IIS并且可以设置文件共享,这可能是你的一个选择。

另外,like XToro says,将它们存储在SQL数据库中是一个选项。这里存储是灵活的,因为您不必担心文件夹或文件名称冲突。多个用户可以分别拥有相同名称的相册和文件,但它们不会发生冲突,因为它们不像普通文件那样占用文件系统空间。如果安全性对您的应用程序非常重要(不向未授权的用户显示照片或专辑),将它们放入SQL表格中会使其变得相当容易。

但是,如果您不担心安全性或文件命名冲突,您可以轻松地将它们存储在MVC应用程序的〜/ Images或〜/ Albums目录中。

+2

我会将它们存储在App_Data中,但会创建一个处理程序来读取文件内容并将其代理到HTTP响应中。这可以防止任何漏洞,允许用户上传脚本或可执行文件,然后在服务器上执行它。因此,而不是http://www.example.com/App_Data/img.png的图片请求,它会使http://www.example.com/Images/LoadImage/img.pgn正常化请求(例如检查用户权限,删除任何目录遍历字符,检查它只提供有效的图像),如果一切正常,则从文件系统读取图像。 – SilverlightFox 2012-08-16 15:42:17

+0

@SilverlightFox,我没有想到这一点。我们一直这样从App_Data中读取XML和其他内容,但没有考虑将它用于图像,好点。 – danludwig 2012-08-16 16:09:30

0

既然你可以轻松地为用户检查在图像存储,一旦应用投入生产,在那里你存储图像并不重要,就像什么权限设置为图像存储的文件夹(S)英寸

+1

我不会将图像存储在App_data中,因为它被视为用户内容,而不是属于应用程序的文件。 – Henkealg 2012-08-15 06:51:35

1

根据您的服务器的性能,您可能希望使用BLOB

https://dev.mysql.com/doc/refman/5.0/en/blob.html

图像可以很容易地排序,组织,无需进行分类担心考虑存储你的图片存入数据库关于文件夹结构和文件夹权限。只需使用您选择的PHP/AJAX /语言来提供身份验证并选择要显示的文件。

这样,每个图像可以有它自己的字段(多达你想要的)喜欢谁贴吧的用户,原来的文件名,标题,它属于等等等等

0

我会用文件的专辑系统,正如你所说的,但将它存储在应用程序文件夹之外,因为你认为这是不好的做法。我同意这一点 - 当我这样做部署,我宁愿删除一切,并在新的代码下降,并保持在web.config文件这样,我总是有一个清洁的环境,它就是要从头开始要容易得多,而不必担心我需要备份或从以前的安装带来。

我会使用IIS的目录映射到我的解决方案,无论我从网络共享存储的欲望或徘徊无论你要妥善保管您的相册。

例如D:\MySafeStorage\Albums\当您的网站在C:\inetpub\MyWebSite\

相关问题