存储网站图像的最佳方式

Mik*_*der 3 asp.net-mvc image filestream

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

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

谢谢

Moh*_*ady 7

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

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

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

<img src='<?= IMAGES_FOLDER."/".$post->getId()."/".$post->getImageName() ?>' />
Run Code Online (Sandbox Code Playgroud)

当然getImage(),在帖子中添加一个函数会很好,检查示例:

public function getImage()
{
    return IMAGES_FOLDER."/".$this->getId()."/".$this->getImageName();
}
Run Code Online (Sandbox Code Playgroud)

img标签将是现在更清洁

<img src='<?= $post->getImage() ?>' />
Run Code Online (Sandbox Code Playgroud)

PS:在数据库中存储图像是非常低效的,因为数据库通常是应用程序的瓶颈,存储图像会增加数据库大小,并且每当访问网站上的任何图像时都会有更多的点击,更不用说打开运行php(或您正在使用的任何语言)脚本以提供该图像所需的任何图像,这将增加服务器上的RAM使用率.

此外,由于您提到用户要上传图像,请尝试避免存储与上传图像名称相同的图像,使事情看起来很愚蠢,特别是使用长名称和使用空格和内容的名称时,我通常会通过执行以下操作md5来处理图像名称,或生成一个随机字符串,md5它也保持字符串长度不变,看起来更干净,不要忘记仔细检查图像的存在,以避免覆盖它.

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