图片传入数据库
mysql数据库是可以存储图片的,操作方法: 1、具体的脚本代码如下,其中我们假定文件上传域的名称为Picture; 2、这样,我们就可以成功的把图片保存到数据库中。
如果在将图片插入MySQL的过程中出现问题,可以检查一下MySQL数据库所允许的最大数据包的大小。如果设置值过小的话,我们会在数据库的错误日志中找到相应的记录; 3、提取图片方法:编写两个文件。其中,第一个文件作为HTML页面的模板,定位图片的显示位置。第二个文件则被用来从数据库中实际输出文件流,作为标签的SRC属性; 4、当HTML页面被浏览时,每显示一副图片就会调用一次Second.php3文件。当第二个文件被调用时会传入相应的Picture ID,我们可以借此从数据库中取回对应的图片并显示。在设计到数据库的开发中,难免要将图片或音频文件插入到数据库中的情况。一般来说,我们可以同过插入图片文件相应的存储位置,而不是文件本身,来避免直接向数据库里插入的麻烦。但有些时候,向MySQL中插入图片更加容易管理。
2. 如何将图片存到数据库
通常对用户上传的图片需要保存到数据库中。解决方法一般有两种:一种是将图片保存的路径存储到数据库;另一种是将图片以二进制数据流的形式直接写入数据库字段中。以下为具体方法:
一、保存图片的上传路径到数据库:
string uppath="";//用于保存图片上传路径
//获取上传图片的文件名
string fileFullname = this.FileUpload1.FileName;
//获取图片上传的时间,以时间作为图片的名字可以防止图片重名
string dataName = DateTime.Now.ToString("yyyyMMddhhmmss");
//获取图片的文件名(不含扩展名)
string fileName = fileFullname.Substring(fileFullname.LastIndexOf("\\") + 1);
//获取图片扩展名
string type = fileFullname.Substring(fileFullname.LastIndexOf(".") + 1);
//判断是否为要求的格式
if (type == "bmp" || type == "jpg" || type == "jpeg" || type == "gif" || type == "JPG" || type == "JPEG" || type == "BMP" || type == "GIF")
{
//将图片上传到指定路径的文件夹
this.FileUpload1.SaveAs(Server.MapPath("~/upload") + "\\" + dataName + "." + type);
//将路径保存到变量,将该变量的值保存到数据库相应字段即可
uppath = "~/upload/" + dataName + "." + type;
}
二、将图片以二进制数据流直接保存到数据库:
引用如下命名空间:
using System.Drawing;
using System.IO;
using System.Data.SqlClient;
设计数据库时,表中相应的字段类型为iamge
保存:
//图片路径
string strPath = this.FileUpload1.PostedFile.FileName.ToString ();
//读取图片
FileStream fs = new System.IO.FileStream(strPath, FileMode.Open, FileAccess.Read);
BinaryReader br = new BinaryReader(fs);
byte[] photo = br.ReadBytes((int)fs.Length);
br.Close();
fs.Close();
//存入
SqlConnection myConn = new SqlConnection("Data Source=.;Initial Catalog=stumanage;User ID=sa;Password=123");
string strComm = " INSERT INTO stuInfo(stuid,stuimage) VALUES(107,@photoBinary )";//操作数据库语句根据需要修改
SqlCommand myComm = new SqlCommand(strComm, myConn);
myComm.Parameters.Add("@photoBinary", SqlDbType.Binary, photo.Length);
myComm.Parameters["@photoBinary"].Value = photo;
myConn.Open();
if (myComm.ExecuteNonQuery() > 0)
{
this.Label1.Text = "ok";
}
myConn.Close();
读取:
...连接数据库字符串省略
mycon.Open();
SqlCommand command = new
SqlCommand("select stuimage from stuInfo where stuid=107", mycon);//查询语句根据需要修改
byte[] image = (byte[])command.ExecuteScalar ();
//指定从数据库读取出来的图片的保存路径及名字
string strPath = "~/Upload/zhangsan.JPG";
string strPhotoPath = Server.MapPath(strPath);
//按上面的路径与名字保存图片文件
BinaryWriter bw = new BinaryWriter(File.Open(strPhotoPath,FileMode.OpenOrCreate));
bw.Write(image);
bw.Close();
//显示图片
this.Image1.ImageUrl = strPath;
采用俩种方式可以根据实际需求灵活选择。
3. 怎样设置数据库,才能存放图片
要将图片存入数据库,首先需要确定数据库中用于存储图片的列类型。这里推荐使用BLOB(Binary Large Object)类型,因为BLOB可以存储大量的二进制数据。
转换图片为二进制数据的具体方法如下:使用编程语言中的相应库,将图片文件读取为字节流,然后将字节流转换为二进制字符串。例如,在python中可以使用
python
with open('image.jpg', 'rb') as file:
binary_data = file.read()
这段代码会将图片转换为二进制数据。
接下来,你需要将二进制数据插入到数据库中。具体操作依赖于你使用的数据库管理系统。例如,在MySQL中可以使用如下SQL语句:
sql
INSERT INTO table_name (image_column) VALUES (UNHEX(REPLACE('binary_data', ' ', '')))
其中,`binary_data`需要替换为你实际的二进制数据,`UNHEX`函数用于将十六进制字符串转换为二进制数据。
读取存储在数据库中的图片数据也非常简单。你可以使用类似的方法将二进制数据转换回图片。在Python中可以使用如下代码:
python
import mysql.connector
connection = mysql.connector.connect(user='user', password='password', host='127.0.0.1', database='database')
cursor = connection.cursor()
query = "SELECT image_column FROM table_name WHERE condition"
cursor.execute(query)
for (image_column) in cursor:
with open('output_image.jpg', 'wb') as file:
file.write(image_column[0])
这段代码会从数据库中读取图片数据,并将其保存为新的图片文件。
值得注意的是,将图片直接存储在数据库中可能会导致数据库性能下降,特别是在存储大量图片的情况下。因此,考虑使用文件系统存储图片,然后在数据库中存储文件路径。这样可以提高性能并简化管理。
总之,将图片存储在数据库中需要一定的技术知识和步骤,但通过正确的方法可以实现。