问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

php把图片上传到数据库并显示

发布网友 发布时间:2022-04-07 08:43

我来回答

2个回答

懂视网 时间:2022-04-07 13:05

PHP上传图片到数据库并显示

1、创建数据表

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)
)engine=myisam DEFAULT charset=utf8

2、用于上传图片到服务器的页面 upimage.html

<!doctype html>
<html>
<head>
 <meta charset="UTF-8">
 <meta name="viewport"
  content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
 <meta http-equiv="X-UA-Compatible" content="ie=edge">
 <style type="text/css">
 *{margin: 1%}
 </style>
 <title>Document</title>
</head>
<body>
<form method="post" action="upimage.php" enctype="multipart/form-data">
 描述:
 <input type="text" name="form_description" size="40">
 <input type="hidden" name="MAX_FILE_SIZE" value="1000000"> <br>
 上传文件到数据库:
 <input type="file" name="form_data" size="40"><br>
 <input type="submit" name="submit" value="submit">
</form>
</body>
</html>

3、处理图片上传的php upimage.php

<?php
if (isset($_POST['submit'])) {
 $form_description = $_POST['form_description'];
 $form_data_name = $_FILES['form_data']['name'];
 $form_data_size = $_FILES['form_data']['size'];
 $form_data_type = $_FILES['form_data']['type'];
 $form_data = $_FILES['form_data']['tmp_name'];
 
 $dsn = 'mysql:dbname=test;host=localhost';
 $pdo = new PDO($dsn, 'root', 'root');
 $data = addslashes(fread(fopen($form_data, "r"), filesize($form_data)));
 //echo "mysqlPicture=".$data;
 
 $result = $pdo->query("INSERT INTO ccs_image (description,bin_data,filename,filesize,filetype)
   VALUES ('$form_description','$data','$form_data_name','$form_data_size','$form_data_type')");
 if ($result) {
 echo "图片已存储到数据库";
 } else {
 echo "请求失败,请重试";

注:图片是以二进制blob形式存进数据库的,像这样

4、显示图片的php getimage.php

<?php
 
 $id =2;// $_GET['id']; 为简洁,直接将id写上了,正常应该是通过用户填入的id获取的
 $dsn ='mysql:dbname=test;host=localhost';
 $pdo = new PDO($dsn,'root','root');
 $query = "select bin_data,filetype from ccs_image where id=2";
 $result = $pdo->query($query);
 $result = $result->fetchAll(2);
// var_dump($result);
 $data = $result[0]['bin_data'];
 $type = $result[0]['filetype'];
 Header( "Content-type: $type");
 echo $data;

5、到浏览器查看已经上传的图片,看是否可以显示

210157258e7fc9e2acae9b9068b37b1.png

是没有问题的,证明图片已经以二进制的形式存储到数据库了

更多PHP相关知识,请访问PHP教程!

热心网友 时间:2022-04-07 10:13

blob类型
<?php
/*******************************************************
** 文件名:upload_file.php
** Copyright @ 2009
** 创建人:tabor
** 日期:2009年7月24日 8:00
** 修改人:
** 日期:
** 描述:文件上传操作以及对图片文件的处理
** 版本:
********************************************************/
class upload_file {
//保存的文件名
public $file_name;
//系统中上传文件的临时存放路径
public $file_tmp_name;
//文件大小
public $file_size;
//完整的文件类型
public $full_file_type;
//文件类型
public $file_type;
//文件是否覆盖
public $override = 1;
//文件的保存路径
public $file_save_path = '';
//上传文件大小的最大值 单位是字节 2M
public public $file_max_size = 210000000;
//public public $file_max_size = 102400;

//构造函数
function __construct($file_name = '', $file_tmp_name = '', $full_file_type = '', $file_size = '', $file_save_path = '') {
$this->file_name = $file_name;
$this->file_tmp_name = $file_tmp_name;
$this->full_file_type = $full_file_type;
$this->file_size = $file_size;
$this->file_save_path = $file_save_path;
}
//取得文件的后缀名,即文件类型
function get_file_type() {
$type_array = explode('.', $this->file_name);
return $type_array[count($type_array)-1];
}
//判断文件的大小
function check_size() {
if($this->file_size > $this->file_max_size) {
return false;
}
return true;
}
//取得文件的大小
function get_size() {
return intval($this->file_size/1024);
}
//上传图片 格式 jpg,png,gif,pjpeg
function check_upload_pic() {
$type = $this->get_file_type();
$type_array = array('jpg', 'png', 'gif', 'bmp');
foreach($type_array as $value) {
if($value = $type) {
return true;
}
return false;
}
}
//上传文件 格式 zip rar
function check_upload_file() {
$type = $this->get_file_type();
$type_array = array('jpg','gif','bmp','png');
foreach($type_array as $value) {
if($value == $type) {
return true;
}
return false;
}

}
//判断文件是否存在
function check_exist() {
$file = $this->file_save_path.$this->file_name;
return file_exists($file);
}
//上传文件
function move_upfile() {
if(!$this->check_upload_pic()) {
echo "ok1";
return false;
}
else {
if(!$this->check_size()) {
echo "ok2";
return false;
}
else {
// if($this->check_exist()) {
// echo "该文件已存在";
// return false;
// }
// else {
$path = $this->file_save_path.$this->file_name;
if(move_uploaded_file($this->file_tmp_name, $path)) {
return true;
}
else {
return false;
}

// }
}
}
}
//将上传的图片打水印
/**
* $water_pic_name 将要被打水印的目标图片
* $water_word 水印文字
* $path 将来生成水印图片的存放路径
*/
function create_water_pic($water_word) {
$type = $this->get_file_type();
$filename = $this->file_save_path.$this->file_name;
switch($type) {
case 'jpg':
header("content-type:image/jpeg"); //定义输出图像的类型
$im = imagecreatefromjpeg($filename); //载入图片
break;
case 'png':
header("content-type:image/png");
$im = imagecreatefrompng($filename);
break;
case 'gif':
header("content-type:image/gif");
$im = imagecreatefromgif($filename);
break;
case 'bmp':
header("content-type:image/xbm"); //上传bmp格式存在问题
$im = imagecreatefromxbm($filename); //无法打水印
break;
default: {
echo "文件格式不符";
}
}
$textcolor = imagecolorallocate($im, 56, 73,136); //设定字体的颜色
$font = "simhei.ttf"; //定义字体
$word = $water_word; //水印字符
$x = imagesx($im); //获取图片的宽度
$y = imagesy($im); //获取文件的高度
$position_x = $x-80;
$position_y = $y-10;
$str = iconv('gbk', 'utf-8', $word); //将中文文字显示出来的编码过程
imagettftext($im, 20, 0, $position_x, $position_y, $textcolor, $font, $str);
//imagejpeg($im); //显示图片
$new = $this->file_save_path.'water'.$this->file_name; //生成新的文件名
switch($type) {
case 'jpg':
imagejpeg($im, $new); //生成jpg图像
break;
case 'png':
imagepng($im, $new); //生成png图像
break;
case 'gif':
imagegif($im, $new); //生成gif图像
break;
case 'bmp':
imagexbm($im, $new); //生成bmp图像 该格式的文件处理有问题
break;
default: {
echo "文件格式不符";
}
}
imagedestroy($im); //结束图形,释放内存空间*/
}
//生成缩略图
/**
* $pic 图片名 包括其扩展名,但不包括路径
* $width 将来生成缩略图的宽度
* $height 将来生成缩略图的高度
* $path 生成缩略图的存放路径
*/
function create_thumbnail($width, $height) {
$type = $this->get_file_type();
$filename = $this->file_save_path.$this->file_name;
$img = getimagesize($filename);
//print_r($img);
//die();
switch($img[2]) {
case 1:
header("content-type:image/gif"); //定义输出图像的类型
$im = imagecreatefromgif($filename); //载入图片
break;
case 2:
header("content-type:image/jpeg");
$im = imagecreatefromjpeg($filename);
break;
case 3:
header("content-type:image/png");
$im = imagecreatefrompng($filename);
break;
case 6:
header("content-type:image/xbm"); //bmp格式存在问题
$im = imagecreatefromxbm($filename); //无法打水印
break;
default: {
echo "文件格式不符";
}
}
$thumb = imagecreatetruecolor($width, $height); //创建一个新的空白的面板
$color = imagecolorallocate($im, 200, 255, 100); //调色板
/*bool imagecopyresized ( resource dst_image, resource src_image, int dst_x, int dst_y, int src_x, int src_y, int dst_w, int dst_h, int src_w, int src_h )
imagecopyresized() 将一幅图像中的一块正方形区域拷贝到另一个图像中。dst_image 和 src_image 分别是目标图像和源图像的标识符。
*/
imagecopyresized($thumb, $im, 0, 0, 0, 0, $width, $height, $img[0], $img[1]);
//imagejpeg($thumb);
$thumb_path = $this->file_save_path."thumbnail/".$this->file_name;
switch($img[2]) {
case 1:
imagejpeg($thumb, $thumb_path);
break;
case 2:
imagegif($thumb, $thumb_path);
break;
case 3:
imagepng($thumb, $thumb_path);
break;
case 6:
imagexbm($thumb, $thumb_path);
break;
default: {
echo "文件格式不符";
}
}
}
}
?>

前几天做的一个类,可以正常的使用,但还存在问题,仅供参考!忘对您有所帮助
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
单位高温防护欠缺致员工中暑如何对待 狗狗为什么爱看视频 360浏览器怎么设置倍速播放 ...先讲女主的灵魂飘荡了一段时间,然后重生,请问是那本? 拯救者散热器怎么开 电脑如何一键还原系统电脑一键还原怎么操作 神舟笔记本电脑怎么重新设置神舟战神bios恢复出厂设置 神舟电脑恢复出厂设置神舟战神怎么恢复原厂系统 水泥楼梯如何铺木楼梯 家里面楼梯是水泥的不想铺地毯或者地砖还能铺什么 小微企业申请抵押贷款需要什么材料? ai文件的介绍 中国移动现在为什都在投标安防工程中国移动为什么都在投标安防工程 注册过的怎么填写邀请码? 可推邀请码可以随便填吗 中国移动招投标网 抖音直播间的福袋能设置屏蔽某个人吗- 问一问 我在注册一个论坛的会员时,最后有个邀请码要填。什么是邀请码啊?怎么才能得到邀请码? 注册某网站时需要邀请码,邀请码是什么?怎样才能获取邀请码? 如何在中国移动招标网找到对应中标通知书 关于注册中遇到的 邀请码 注册时要写:邀请码是怎么来的 中国移动电子投标系统按步骤上传了全部,点提交就显示尚未上传报价文件。一直显示尚未上传报价。_百度问一问 中国移动电子采购与招标投标系统怎么进新版 中国移动电子投标系统按步骤上传了全部,最后一步提交一直显示尚未上传报价。_百度问一问 中国移动招标网 投标时候用什么浏览器比较好? 2020山西执业药师报名入口今日关闭! 中国移动招标网的投标操作要用什么版本的浏览器 移动招标网通过辅助投标工具进行递交是什么意思 趣播邀请码是多少? 相机S A M P档 的区别 富士数码相机A档P档都是什么意思啊 富士jx710功能设置 富士相机F200的M档是用来干什么的? 富士F75各档位介绍(新手请教) 怎样使用富士相机s1770的M档 富士数码相机A档P档等等都怎么用啊 富士X一E3有m档吗? 请教富士F85相机怎样设置 富士相机设置菜单里的快速拍摄的具体功能是什么?谢谢! 活字印刷术的缺点和优点 活字印刷术与雕版印刷术相比有哪些优点? 与雕版印刷术相比,活字印刷术有何优势 活字印刷术具有哪些优势? 活字印刷术与雕版印刷术相比有哪些优点 毕A发明的活字印刷术与雕版印刷相比,有哪些优点? 活字印刷术有哪些优点,意义是什么 活字印刷术此项发明有哪些优点? 雕版印刷的优点和缺点是什么? 活字印刷的优点和缺点是什么? 四大发明中的活字印刷术,哪些优点真是惊艳了你?