10

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

我使用 javascript 在画廊中显示我的图像,这需要图像的 url。我希望用户上传图片,但我不确定将这些图片存储在服务器上的最佳方式是什么。我是否将它们作为纯图像保存在服务器上的文件夹中?或者最好使用 SQL 来处理数据,无论是 byte[] 还是我听说过 Filestream,filestream 可以给我我需要的东西吗?或者,还有更好的方法?

谢谢

4

2 回答 2

13

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

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

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

<img src='<?= IMAGES_FOLDER."/".$post->getId()."/".$post->getImageName() ?>' />

getImage()当然,在帖子中添加一个功能会很好,请查看示例:

public function getImage()
{
    return IMAGES_FOLDER."/".$this->getId()."/".$this->getImageName();
}

标签现在img会更干净

<img src='<?= $post->getImage() ?>' />

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

另外,既然您提到用户将要上传图片,请尽量避免存储与他们上传的名称相同的图片,这会让事情看起来很傻,尤其是长名称和使用空格和其他东西的名称,我通常通过md5对图像名称,或生成随机字符串以及md5它,保持字符串长度不变并且看起来更干净,不要忘记仔细检查图像的存在以避免覆盖它。

当然,我建议的所有名称都只是示例,您可以随意使用适合您应用的名称。

于 2013-06-28T11:23:21.407 回答
0

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

于 2021-03-06T09:20:42.637 回答