存储网站图像的最佳方式

时间:2013-06-28 09:47:03

标签: asp.net-mvc image filestream

有人可以指导我为我的网站存储图像的最佳方式。我正在创建我的第一个MVC网站,我想我会从一个图像网站开始,对这些图像发表评论......

我使用javascript在图库中显示我的图片,这需要图片的网址。我希望用户上传图片,但我不确定这是将它们存储在服务器上的最佳方式。我将它们保存在服务器上的文件夹中作为纯图像吗? 或者最好使用SQL来处理数据,是字节[]或者我听说过Filestream,文件流可以给我我需要的东西吗? 或者有更好的方法吗?

由于

2 个答案:

答案 0 :(得分:7)

我说将所有图像存储在图像文件夹中,然后将图像的路径存储在数据库中,例如,如果我们正在发帖子并且每个帖子都有图像,我们可以将图像上传到{{1}并将路径/webroot/images/保存在数据库中。

如果网站上有很多图片,最好进一步组织,在一个文件夹中有数千个文件并不好,特别是如果你要尝试用ftp连接东西,你可以添加一个带有帖子ID的文件夹(在我提到的示例中),因此它将成为/webroot/images/someimage.jpg

如果前缀始终相同/webroot/images/[id]/image1.jpg,您可以在数据库中忽略它以保存一些磁盘空间,前提是应用程序知道images文件夹的位置,也可以忽略第二个/webroot/images例如,视图代码将是这样的

id

当然,在帖子中添加<img src='<?= IMAGES_FOLDER."/".$post->getId()."/".$post->getImageName() ?>' /> 函数会很好,请查看示例:

getImage()

public function getImage() { return IMAGES_FOLDER."/".$this->getId()."/".$this->getImageName(); } 标签现在更清洁

img

PS :在数据库中存储图像的效率非常低,因为数据库通常是应用程序的瓶颈,存储图像会增加数据库大小,并且每次访问任何数据库时都会执行更多命中网站上的图片,更不用说打开运行php(或者你正在使用的任何语言)脚本来运送该图像所需的任何图像,这会增加服务器上的RAM使用率。

此外,由于您提到用户要上传图片,请尝试避免存储与上传图片名称相同的图片,让事情看起来很愚蠢,特别是使用长名称和使用空格和内容的名称时,我通常会这样做对图像名称<img src='<?= $post->getImage() ?>' /> ,或者生成一个随机字符串以及它md5,保持字符串长度不变并且看起来更干净,不要忘记仔细检查图像是否存在以避免覆盖它

当然,我建议的所有名称仅用于示例,您可以自由使用适合您应用的名称。

答案 1 :(得分:0)

虽然对于存储图像的最佳位置的问题没有一个万能的答案,但对于性能“和安全相关问题”,您应该考虑将图像放在您的网络服务器上。但是,正如我之前提到的,这取决于您的用例。在某些情况下,DB 甚至根本不值得考虑,而您服务器的文件系统是您最好的选择(通常在您没有太多 BLOB 并且每个单元都不如 1MB 大的情况下)。在其他情况下,通常使用一点(或更多)高级优化技术,数据库可能是更好的选择。通常情况下,这是在您处理大量二进制数据(媒体、PDF 等)的情况下。