zoukankan      html  css  js  c++  java
  • 关于图片或者文件在数据库的存储方式归纳

    商品图片,用户上传的头像,其他方面的图片。目前业界存储图片有两种做法:

    1、  把图片直接以二进制形式存储在数据库中

    一般数据库提供一个二进制字段来存储二进制数据。比如mysql中有个blob字段。oracle数据库中是blob或bfile类型

    2、  图片存储在磁盘上,数据库字段中保存的是图片的路径。

    一、图片以二进制形式直接存储在数据库中

    第一种存储实现(php语言):

    大体思路:

    1、将读取到的图片用php程序转化成二进制形式。再结合insert into 语句插入数据表中的blob类型字段中去。

    3、  从数据库取出图片展示的时候。则是直接发送图片内容

    4、  

    $row=mysql_fetch_object($result); Header( "Content-type: image/gif"); echo $row->this_image;

    实现代码如下:

    $PicturePath = ‘/tmp/xxxjgjgj.jpg’;//假设这是上传的图片,php放在一个临时文件夹。脚本执行完毕后自动删除了。

    $imgStream = fread(fopen($PicturePath, "r");

    $blob_img = fread(fopen($imgStream, "r"), filesize($PicturePath));

    $sql =” INSERT INTO Images (this_image) VALUES ($blob_img)";

    注:this_image就是数据表中一个blob字段类型的字段

    ================取出展示图片代码

    $result=mysql_query("SELECT * FROM Images WHERE PicNum=$PicNum") or die("Cant perform Query"); $row=mysql_fetch_object($result); Header( "Content-type: image/gif"); echo $row-> this_image;

    总结:处理代码感觉还真比较麻烦。其实,我从来没用过在数据库中以二进制存储图片的做法。我们用得更多的是存储图片的路径,实际图片是在磁盘上保存的。

    据我了解,互联网环境中,大访问量,数据库速度和性能方面很重要。一般在数据库存储图片的做法比较少,更多的是将图片路径存储在数据库中,展示图片的时候只需要连接磁盘路径把图片载入进来即可。因为图片是属于大字段。一张图片可能1m到几m。

    有个原则:图片尽量不要存储在数据库中。这样的大字段数据会加重数据库的负担,拖慢数据库。在大并发访问的情况下很重要。这是一个经验。去看看dba对数据库性能调优方面的分析都能得到这个答案的:就是图片不要存储在数据库中。

  • 相关阅读:
    RUP十大要素的应用
    使用ASP.NET 3.5 Extensions管理浏览器历史:使用服务器端
    Autodesk云计算系列视频 开篇介绍 Up to the cloud 直上云端
    AIMS 2012 不能登录的问题
    Autodesk Infrastructure Modeler (原Galileo伽利略项目)已经正式发布
    MapGuide开发中使用Fusion Viewer及通过程序开关图层
    MapGuide OpenSource 2.2 安装中的数字签名错误
    MapGuide / Map 3D 开发常用资料链接
    基于MapGuide的在线WebGIS站点再介绍
    Autodesk云计算系列视频 云计算与Civil 3D
  • 原文地址:https://www.cnblogs.com/xlz307/p/3467816.html
Copyright © 2011-2022 走看看