http://www.jb51.net/article/61034.htm

作者:傲雪星枫 字体:[增加 减小] 类型:转载
 
这篇文章主要介绍了php实现上传图片保存到数据库的方法,可通过将图片保存在数据库实现多台服务器共享文件的功能,非常具有实用价值,需要的朋友可以参考下
 
 

php实现上传图片保存到数据库的方法。分享给大家供大家参考。具体分析如下:

php 上传图片,一般都使用move_uploaded_file方法保存在服务器上。但如果一个网站有多台服务器,就需要把图片发布到所有的服务器上才能正常使用(使用图片服务器的除外)
如果把图片数据保存到数据库中,多台服务器间可以实现文件共享,节省空间。

首先图片文件是二进制数据,所以需要把二进制数据保存在mysql数据库。
mysql数据库提供了BLOB类型用于存储大量数据,BLOB是一个二进制对象,能容纳不同大小的数据。

BLOB类型有以下四种,除存储的最大信息量不同外,其他都是一样的。可根据需要使用不同的类型。

TinyBlob       最大 255B
Blob              最大 65K
MediumBlob  最大 16M
LongBlob      最大 4G

数据表photo,用于保存图片数据,结构如下:

复制代码代码如下:
CREATE TABLE `photo` (  
  `id` int(10) unsigned NOT NULL auto_increment,  
  `type` varchar(100) NOT NULL,  
  `binarydata` mediumblob NOT NULL,  
  PRIMARY KEY  (`id`)  
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;

upload_image_todb.php:

复制代码代码如下:
<?php  
// 连接数据库  
$conn=@mysql_connect("localhost","root","")  or die(mysql_error());  
@mysql_select_db('demo',$conn) or die(mysql_error());

// 判断action  
$action = isset($_REQUEST['action'])? $_REQUEST['action'] : '';

// 上传图片  
if($action=='add'){  
    $image = mysql_escape_string(file_get_contents($_FILES['photo']['tmp_name']));  
    $type = $_FILES['photo']['type'];  
    $sqlstr = "insert into photo(type,binarydata) values('".$type."','".$image."')";  
    @mysql_query($sqlstr) or die(mysql_error());  
    header('location:upload_image_todb.php');  
    exit();  
// 显示图片  
}elseif($action=='show'){  
    $id = isset($_GET['id'])? intval($_GET['id']) : 0;  
    $sqlstr = "select * from photo where id=$id";  
    $query = mysql_query($sqlstr) or die(mysql_error());  
    $thread = mysql_fetch_assoc($query);  
    if($thread){  
        header('content-type:'.$thread['type']);  
        echo $thread['binarydata'];  
        exit();  
    }  
}else{  
// 显示图片列表及上传表单  
?>  
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">  
<html>  
 <head>  
  <meta http-equiv="content-type" content="text/html; charset=utf-8">  
  <title> upload image to db demo </title>  
 </head>  
  
 <body>  
  <form name="form1" method="post" action="upload_image_todb.php" enctype="multipart/form-data">  
  <p>图片:<input type="file" name="photo"></p>  
  <p><input type="hidden" name="action" value="add"><input type="submit" name="b1" value="提交"></p>  
  </form>  
  
<?php  
    $sqlstr = "select * from photo order by id desc";  
    $query = mysql_query($sqlstr) or die(mysql_error());  
    $result = array();  
    while($thread=mysql_fetch_assoc($query)){  
        $result[] = $thread;  
    }  
    foreach($result as $val){  
        echo '<p><img src="upload_image_todb.php?action=show&id='.$val['id'].'&t='.time().'" width="150"></p>';  
    }  
?>  
</body>  
</html>  
<?php  
}  
?>

php实现上传图片保存到数据库的方法的更多相关文章

  1. C#(WinForm)上传图片保存到数据库和从数据库读取图片显示到窗体

    //浏览图片 private void btnUp_Click(object sender, EventArgs e) { OpenFileDialog ofd = new OpenFileDialo ...

  2. Java web项目 上传图片保存到数据库,并且查看图片,(从eclipse上移动到tomact服务器上,之路径更改,包括显示图片和导出excel)

    //项目做完之后,在本机电脑运行完全正常,上传图片,显示图片,导出excel,读取excel等功能,没有任何问题,但是,当打成war包放到服务器上时,这些功能全部不能正常使用. 最大的原因就是,本机测 ...

  3. C#解析复杂的Json成Dictionary<key,value>并保存到数据库(多方法解析Json 四)

    准备工作: 1.添加引用System.Web.Extensions, 2..net3.5+版本都有,如果VS2010找不到,在这个文件夹找:C:\Program Files\Reference Ass ...

  4. C# 图片保存到数据库和从数据库读取图片并显示

    图片保存到数据库的方法: public void imgToDB(string sql)        {   //参数sql中要求保存的imge变量名称为@images            //调 ...

  5. 芝麻HTTP:Python爬虫实战之抓取爱问知识人问题并保存至数据库

    本次为大家带来的是抓取爱问知识人的问题并将问题和答案保存到数据库的方法,涉及的内容包括: Urllib的用法及异常处理 Beautiful Soup的简单应用 MySQLdb的基础用法 正则表达式的简 ...

  6. Python爬虫实战六之抓取爱问知识人问题并保存至数据库

    大家好,本次为大家带来的是抓取爱问知识人的问题并将问题和答案保存到数据库的方法,涉及的内容包括: Urllib的用法及异常处理 Beautiful Soup的简单应用 MySQLdb的基础用法 正则表 ...

  7. .NET客户端下载SQL Server数据库中文件流保存的大电子文件方法(不会报内存溢出异常)

    .NET客户端下载SQL Server数据库中文件流保存的大电子文件方法(不会报内存溢出异常) 前段时间项目使用一次性读去SQL Server中保存的电子文件的文件流然后返回给客户端保存下载电子文件, ...

  8. Java 用jxl读取excel并保存到数据库(此方法存在局限,仅限本地电脑操作,放在服务器上的项目,需要把文件上传到服务器,详细信息,见我的别的博客)

    项目中涉及到读取excel中的数据,保存到数据库中,用jxl做起来比较简单. 基本的思路: 把excel放到固定盘里,然后前段页面选择文件,把文件的名字传到后台,再利用jxl进行数据读取,把读取到的数 ...

  9. 用Seam实现:图片上传 + 保存到数据库 + 从数据库读出图片并显示到页面中

    上传图片并保存到数据库 seam给我们提供了 s:fileUpload 标签以完成文件上传功能.使用该标签时,要在web.xml中声明一个Seam的过滤器: <filter> <fi ...

随机推荐

  1. mybatis 如何查找表里的某一个字段,然后返回它们的结果集list ?

    <select id="findArgByParams" resultType="string" parameterType="map" ...

  2. Sql server之路 (五)插入多条数据

    public bool GetDataUsingDataTaskReason(StationReasonCollection reason) { try { strCon.Open(); DateTi ...

  3. PHP版QQ互联OAuth示例代码分享

    )   {     $ch = curl_init();     if(! $flag) curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);     cu ...

  4. 使用startActivityForResult方法(转)

    功能:  A.java 是主界面,B.java 是子功能模块,要从A启动B,B干完活之后把结果汇报给A 注意: 使用startActivityForResult方法 在配置文件就是不能指定Activi ...

  5. codeforces 385 c

    Description Recently, the bear started studying data structures and faced the following problem. You ...

  6. node连接--MySQL

    MySQL驱动器:node-mysql; MySQL对象关系映射器:node-sequelize; 例子: package.json: { "name": "shoppi ...

  7. POJ2486 Apple Tree(树形DP)

    题目大概是一棵树,每个结点都有若干个苹果,求从结点1出发最多走k步最多能得到多少个苹果. 考虑到结点可以重复走,容易想到这么个状态: dp[u][k][0]表示在以结点u为根的子树中走k步且必须返回u ...

  8. UVa11324 The Largest Clique(强连通分量+缩点+记忆化搜索)

    题目给一张有向图G,要在其传递闭包T(G)上删除若干点,使得留下来的所有点具有单连通性,问最多能留下几个点. 其实这道题在T(G)上的连通性等同于在G上的连通性,所以考虑G就行了. 那么问题就简单了, ...

  9. BZOJ3941 : [Usaco2015 Feb]Fencing the Herd

    若所有点同侧则表明将各个点带入直线解析式ax+by-c后得到的值均同号等价于最大值和最小值同号考虑CDQ分治,每一步分治的过程中求出上下凸壳,然后三分答案即可时间复杂度$O(n\log^2n)$ #i ...

  10. 解决Windows Server 2003不认U盘或移动硬盘的问题

    1.进入命令提示符环境(也就是DOS) 2.进入DISKPART程序 3.输入AUTOMOUNT ENABLE指令 4.OK,下次USB硬盘接入后就可以像XP 一样自动装载了.