用PHP和MySQL保存和输出图片

mysql可以直接保存二进制的数据,数据类型是blob。 

 
通常在数据库中所使用的文本或整数类型的字段和需要用来保存图片的字段的不同之  
 
处就在于两者所需要保存的数据量不同。MySQL数据库使用专门的字段来保存大容量的数据,数据  
 
类型为BLOB。      
 
MySQL数据库为BLOB做出的定义如下:BLOB数据类型是一种大型的二进制对象,可以保存可  
 
变数量的数据。BLOB具有四种类型,分别是TINYBLOB,BLOB,  MEDIUMBLOB
 和LONGBLOB,区别在于各自所能够保存的最大数据长度不同。

建立数据库
CREATE TABLE ccs_image (
  id int(4) unsigned NOT NULL
auto_increment,
  description varchar(250) default NULL,
 
bin_data longblob,
  filename varchar(50) default NULL,
 
filesize varchar(50) default NULL,
  filetype varchar(50) default
NULL,
  PRIMARY KEY (id)
)

接着是上传文件的页面,upload.php,code如下:





01 <HTML>





02 <HEAD><TITLE>Store binary data into SQL Database</TITLE></HEAD>





03 <BODY>





04  





05 <?php





06  





07  





08 if (isset($_POST[‘submit‘])) {





09 $form_description = $_POST[‘form_description‘];





10 $form_data_name = $_FILES[‘form_data‘][‘name‘];





11 $form_data_size = $_FILES[‘form_data‘][‘size‘];





12 $form_data_type = $_FILES[‘form_data‘][‘type‘];





13 $form_data = $_FILES[‘form_data‘][‘tmp_name‘];





14   





15 $connect MYSQL_CONNECT( "localhost", "root", "") or die("Unable to connect to MySQL server");





16 mysql_select_db( "test") or die("Unable to select database");





17  





18 $data addslashes(fread(fopen($form_data, "r"), filesize($form_data)));





19  





20 //echo "mysqlPicture=".$data;





21  





22  





23 $result=MYSQL_QUERY( "INSERT INTO ccs_image (description,bin_data,filename,filesize,filetype) VALUES (‘$form_description‘,‘$data‘,‘$form_data_name‘,‘$form_data_size‘,‘$form_data_type‘)");





24  





25 $idmysql_insert_id();





26 print "<p>This file has the following Database ID: <a href=‘getdata.php?id=$id‘><b>$id</b></a>";





27  





28  





29 MYSQL_CLOSE();





30  





31 } else {





32  





33 ?>





34  <center>





35 <form method="post" action="http://localhost/temp/1018/upload.php" enctype="multipart/form-data">





36 File Description:





37 <input type="text" name="form_description" size="40">





38 <INPUT TYPE="hidden" name="MAX_FILE_SIZE" value="1000000"> <br>





39 File to upload/store in database:





40 <input type="file" name="form_data" size="40">





41 <p><input type="submit" name="submit" value="submit">





42 </form>





43  </center>





44  





45 <?php





46  





47 }





48  





49 ?>





50 </BODY>





51 </HTML>

上文中的 $_FILES[‘form_data‘][‘name‘]; 等是获取刚上传来的文件的信息,php
manual中有提到

注: 要确保文件上传表单的属性是
enctype="multipart/form-data",否则文件上传不了。

全局变量 $_FILES 自 PHP 4.1.0
起存在(在更早的版本中用 $HTTP_POST_FILES 替代)。此数组包含有所有上传的文件信息。

以上范例中 $_FILES 数组的内容如下所示。我们假设文件上传字段的名称如上例所示,为 userfile。名称可随意命名。


$_FILES[‘userfile‘][‘name‘]


客户端机器文件的原名称。


$_FILES[‘userfile‘][‘type‘]

文件的 MIME 类型,如果浏览器提供此信息的话。一个例子是“image/gif”。不过此 MIME 类型在 PHP
端并不检查,因此不要想当然认为有这个值。


$_FILES[‘userfile‘][‘size‘]

已上传文件的大小,单位为字节。


$_FILES[‘userfile‘][‘tmp_name‘]

文件被上传后在服务端储存的临时文件名。


$_FILES[‘userfile‘][‘error‘]

和该文件上传相关的错误代码。此项目是在 PHP 4.2.0
版本中增加的。

用PHP和MySQL保存和输出图片,布布扣,bubuko.com

时间: 2024-08-11 07:43:32

用PHP和MySQL保存和输出图片的相关文章

Java利用Eclipse和Mysql数据库连接并存储图片——取出图片

通过流和JPEGCodec.JPEGImageEncoder类的操作来取出数据库中的图片. 注释很详细,注意要额外的引入mysql的驱动包,要修改数据库的用户名和密码以及URL.希望对大家有帮助. import java.awt.image.BufferedImage; import java.io.*; import java.sql.Blob; import java.sql.Connection; import java.sql.DriverManager; import java.sql

前端不为人知的一面--前端冷知识集锦 前端已经被玩儿坏了!像console.log()可以向控制台输出图片

前端已经被玩儿坏了!像console.log()可以向控制台输出图片等炫酷的玩意已经不是什么新闻了,像用||操作符给变量赋默认值也是人尽皆知的旧闻了,今天看到Quora上一个帖子,瞬间又GET了好多前端技能,一些属于技巧,一些则是闻所未闻的冷知识,一时间还消化不过来.现分类整理出来分享给大家,也补充了一些平时的积累和扩展了一些内容. HTML篇 浏览器地址栏运行JavaScript代码 这个很多人应该还是知道的,在浏览器地址栏可以直接运行JavaScript代码,做法是以javascript:开

【VC++技术杂谈006】截取电脑桌面并将其保存为bmp图片

本文主要介绍如何截取电脑桌面并将其保存为bmp图片. 1. Bmp图像文件组成 Bmp是Windows操作系统中的标准图像文件格式. Bmp图像文件由四部分组成: (1)位图头文件数据结构,包含Bmp图像文件的类型.文件大小等信息. (2)位图信息数据结构,包含Bmp图像的宽.高.压缩类型等信息. (3)颜色表,该部分可选,有些位图需要,有些位图(如24位真彩色位图)不需要. (4)位图数据. 1.1位图头文件数据结构 位图头文件数据结构包含Bmp图像文件的类型.文件大小等信息,占用14个字节.

PHP《将画布(canvas)图像保存成本地图片的方法》

用PHP将网页上的Canvas图像保存到服务器上的方法 2014年6月27日 歪脖骇客 发表回复 8 在几年前HTML5还没有流行的时候,我们的项目经理曾经向我提出这样一个需求:让项目评审专家们在评审结束时用笔在平板电脑上进行电子签名. 这需要我们评审软件里提供这样一个功能:打开浏览器,登录,进入评审意见页,页面最下部有个方块区域,用户在这里用触摸笔进行签名,然后这个签名将会保持 的服务器上. 这样的一个需求在当时是让我大费周折,但如今想起来,如果用html5的canvas实现,真是太简单了.在

通过g++查询到的mysql中文数据输出是乱码

这几天遇到一个问题: 通过g++查询到的mysql中文数据输出是乱码,而通过g++添加到mysql中的中文数据也是乱码,但单独通过g++输出正常,查询通过mysql添加的中文数据显示也正常. 在网查查询了很久,纠结了半天也没有找到答案.后来通过在linux吧发帖终于找到了解决方案.原来是mysql和g++默认字符集不匹配产生的问题.通过在代码中添加 int mysql_set_character_set(MYSQL *mysql, char *csname)函数终于解决了问题. 源码如下: #i

MVC.Net 5:允许保存和输出Html内容

当我们在保存表单内容时,如果其中有一项内容包含Html的tag时,系统会报如下错误: A potentially dangerous Request.Form value was detected from the client xxxxxxxxxxxx 要让程序绕开这个检验,我们可以在Model类中的对应字段上添加[AllowHtml]标识,如下图所示:这样Html的内容就不会被检测了,但是同时我们就需要注意防止发生注入攻击的可能性,当然这是另外一个话题了. 当我们保存了Html的内容后,如果

mysql保存当前时间精确到秒

用mybatis在mysql中保存字段精确到秒需要两个步骤. 1.现在mysql中将时间字段改为datetime 例如:alter table tablename add pay_date datetime comment '精确到秒的时间' 2.在sql语句中直接用now().  例如:        update tj_record set   is_customerHandover ='1' and customer_handover_date = now() where id = #{r

利用+=n连续保存或者输出n个数

for (int k = 0; k < list.size(); k += 2) { if (((k + 1) % 2) != 0) { m1 = (MealEntity) list.get(k); %> <tr> <td> <a href="MealServlet?type=findbyid&mid=<%=m1.getMealId()%>"><img src="mealImg/<%=m1.get

解决linux系统下python中的matplotlib模块内的pyplot输出图片不能显示中文的问题

问题: 我在ubuntu14.04下用python中的matplotlib模块内的pyplot输出图片不能显示中文,怎么解决呢? 解决: 1.指定默认编码为UTF-8: 在python代码开头加入如下代码 import sys reload(sys) sys.setdefaultencoding('utf-8') 2.确认你ubuntu系统环境下拥有的中文字体文件: 在终端运行命令"fc-list :lang=zh",得到自己系统的中文字体 命令输出如下: /usr/share/fon