PHP使用BLOB存取图片信息实例

  • PHP使用BLOB存取图片信息实例

    • BLOB介绍

      • mysql BLOB类型
      • 创建数据库
    • PHP文件转二进制代码
    • HTML代码
    • 读取二进制图片
      • php完整代码
      • HTML代码

PHP使用BLOB存取图片信息实例

BLOB介绍

BLOB (binary large object),二进制大对象,是一个可以存储二进制文件的容器。在计算机中,BLOB常常是数据库中用来存储二进制文件的字段类型。BLOB是一个大文件,典型的BLOB是一张图片或一个声音文件,由于它们的尺寸,必须使用特殊的方式来处理(例如:上传、下载或者存放到一个数据库)。根据Eric Raymond的说法,处理BLOB的主要思想就是让文件处理器(如数据库管理器)不去理会文件是什么,而是关心如何去处理它。但也有专家强调,这种处理大数据对象的方法是把双刃剑,它有可能引发一些问题,如存储的二进制文件过大,会使数据库的性能下降。在数据库中存放体积较大的多媒体对象就是应用程序处理BLOB的典型例子。

mysql BLOB类型

MySQL中,BLOB是个类型系列,包括:TinyBlob、Blob、MediumBlob、LongBlob,这几个类型之间的唯一区别是在存储文件的最大大小上不同。
类型 大小(单位:字节)
TinyBlob 最大255
Blob 最大65K
MediumBlob 最大16M
LongBlob 最大4G
linux修改etc/my.cnf
[mysqld]
max_allowed_packet = 16M //不同于[mysqldump]下的max_allowed_packet

注意: blob是mysql数据库保留字,请务必不要用于字段名


创建数据库

CREATE TABLE IF NOT EXISTS `myimg` (
   `imgid` tinyint(3) NOT NULL AUTO_INCREMENT,
   `imgtype` varchar(25) NOT NULL DEFAULT ‘‘,
   `imgblob` mediumblob NOT NULL,
    PRIMARY KEY (`imgid`)
)

PHP文件转二进制代码

数据库读取更新插入都是一样的,就不写了,这里只写PHP上传图片转二进制的关键代码

<?php
if(count($_FILES) > 0) {
    if(is_uploaded_file($_FILES[‘upimg‘][‘tmp_name‘])) {
    // 转成二进制
    $imgBlob =addslashes(file_get_contents($_FILES[‘upimg‘][‘tmp_name‘]));
}  

HTML代码

上传文件表单必须定义enctype

enctype="multipart/form-data" 

完整代码

<html>
<head>
    <titel>上传文件到Blob</title>
</head>
<body>
    <form name="formImage" enctype="multipart/form-data" action="" method="post">
        <label>上传文件:</label>
        <input name="upimg" type="file"/>
        <input type="submit" value="提交"/>
    </form>
</div>
</body>
</html>  

读取二进制图片

在浏览器上显示BLOB图像,我们必须:

1、从MySQL BLOB获得图像数据和类型

2、将类型设置为图像(image/jpg, image/gif, …)使用PHP header()函数。

3、输出图像内容。

php完整代码

文件名:imageView.php

<?php
$conn = mysql_connect("localhost", "root", "");
mysql_select_db("myimg") or die(mysql_error());
if(isset($_GET[‘image_id‘])) {
   $sql = "SELECT imgtype,imgblob FROM myimg WHERE imgid=".$_GET[‘imgid‘];
   $result = mysql_query("$sql") or die("<b>Error:</b>SQL语句错误<br/>".mysql_error());
   $row = mysql_fetch_array($result);
   header("Content-type: " . $row["imageType"]);
   echo $row["imageData"];
}
mysql_close($conn);
?>

HTML代码

<img src="imageView.php?image_id=<?php echo $row["imageId"]; ?>" />

感谢浏览收看本文,希望可以对php开发者有帮助。

PHP BloB完整实例参考网络文章

——http://blog.csdn.net/u012275531/article/details/17914999

时间: 2024-11-07 03:48:25

PHP使用BLOB存取图片信息实例的相关文章

java blob存取图片

1. 存入图片 Connection con=db.conn; PreparedStatement pstmt; //File file = upload; FileInputStream inputImage = new FileInputStream(upload); byte[] buf = new byte[inputImage.available()]; inputImage.read(buf); con.setAutoCommit(false); System.out.println

mysql Blob存取的一个简单例子

一.得到mysql的连接 这里封装成一个方法,方便后面使用. public Connection getConnection() throws Exception{ String url = "jdbc:mysql://localhost:3306/dbfortest"; String user = "root"; String password = "root"; Class.forName("com.mysql.jdbc.Drive

关于C#的数据绑定,存取数据库实例详解 (三)

这一节主要关于数据库的操作. 首先在APP.config中添加connectionStrings <connectionStrings > <add name="CIM.iFA.CIS.Infrastructure.Database.CIS210" providerName="System.Data.SqlClient" connectionString="Server=.\SQLEXPRESS;Initial Catalog=CIS20

windows azure 实例

1 public class Album : TableServiceEntity 2 { 3 } 4 public class PhotoAlbumDataContext : TableServiceContext 5 { 6 public PhotoAlbumDataContext() 7 : this(CloudStorageAccount.FromConfigurationSetting("DataConnectionString")) 8 { 9 } 10 11 public

hibernate的映射类型

hibernate的映射类型 hibernate MySQL映射类型 1.Hibernate的映射类型 hibernate mysql映射类型 Hibernate 映射类型 Java 类型 标准 SQL 类型 大小和取值范围 integer 或者 int int 或者 java.lang.Integer INTEGER 4 字节 long long  Long BIGINT 8 字节 short short  Short SMALLINT 2 字节 byte byte  Byte TINYINT

java面试题大全

java面试笔试题大汇总     第一,谈谈final, finally, finalize的区别. 最常被问到. 第二,Anonymous Inner Class (匿名内部类) 是否可以extends(继承)其它类,是否可以implements(实现)interface(接口)? 第三,Static Nested Class 和 Inner Class的不同,说得越多越好(面试题有的很笼统). 第四,&和&&的区别. 这个问得很少. 第五,HashMap和Hashtable的区

JSP 的内置对象及方法,动作和作用,常用指令

JSP 的内置对象及方法:JSP 共有以下9 种基本内置组件:request:用户端请求,此请求会包含来自GET/POST 请求的参数:response:网页传回用户端的回应:pageContext:网页的属性是在这里管理:session:与请求有关的会话期,可以存贮用户的状态信息:application:servlet 正在执行的内容:out:用来传送回应的输出:config:servlet 的构架部件,用于存取servlet 实例的初始化参数:page:JSP 网页本身:exception:

javaee

一. 1. request.getRequestDispatcher转发 前后页面共享一个request,返回的是一个RequestDispatcher对象 response.sendRedirect 重定向,前后不共享一个request 2. RequestDispatcher.forword()是在服务器端运行 httpservletReponse.sendRedirect()是通过向浏览器发送浏览器完成 3.重定向跳转到指定的url地址,所以地址栏会发生改变,转发在一次请求中传递请求,地址

java面试题及答案

JAVA相关基础知识1.面向对象的特征有哪些方面 1.抽象:抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面.抽象并不打算了解全部问题,而只是选择其中的一部分,暂时不用部分细节.抽象包括两个方面,一是过程抽象,二是数据抽象.2.继承:继承是一种联结类的层次模型,并且允许和鼓励类的重用,它提供了一种明确表述共性的方法.对象的一个新类可以从现有的类中派生,这个过程称为类继承.新类继承了原始类的特性,新类称为原始类的派生类(子类),而原始类称为新类的基类(父类).派