重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
解决方法一般有两种:
主要从事网页设计、PC网站建设(电脑版网站建设)、wap网站建设(手机版网站建设)、成都响应式网站建设公司、程序开发、微网站、小程序定制开发等,凭借多年来在互联网的打拼,我们在互联网网站建设行业积累了丰富的网站设计制作、成都网站设计、网络营销经验,集策划、开发、设计、营销、管理等多方位专业化运作于一体,具备承接不同规模与类型的建设项目的能力。
1、将图片保存的路径存储到数据库;
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;
采用这两种方式可以根据实际需求灵活选择。
你这思路就有问题,保存图片最好不要带路径,就保存图片名字就够了。你能保证项目迁移后你保存的路径还和实际环境匹配吗?
可以。存图片的列需要设置成blob、mediumblob或longblob等数据类型。
但是以前基本上不会把图片直接存在数据库里,因为数据库里的数据是为了用来快速分析、快速存取的,图片数据在mysql里既不能建立索引也不能和其他数据一起分析,存取速度和读写磁盘也没什么区别,每次备份、导入导出数据库时还增加了数据量,降低了效率。所以一般都是把图片存在系统里,然后把图片的存放路径放在数据库里。
在数据库中,创建一张data表,用于测试。
请点击输入图片描述
创建一个test.php文件,在文件内,使用header()方法将页面的编码格式设置为utf-8。
请点击输入图片描述
在test.php文件内,连接mysql数据库,并使用mysqli_select_db选择要操作的数据库。
请点击输入图片描述
在test.php文件内,创建一条插入数据的sql语句,向data表插入一张图片地址。
请点击输入图片描述
在test.php文件内,再使用mysqli_query执行sql语句。
请点击输入图片描述
在浏览器打开test.php文件,在数据库查看结果。
请点击输入图片描述
mysql create table t_test(
- id int primary key,
- filepath varchar(256));
mysql insert into t_test values(
- 1, 'd:\\abc');
mysql select * from t_test;
+----+----------+
| id | filepath |
+----+----------+
| 1 | d:\abc |
+----+----------+
把如”d:\abc"中的路径中的\换成两个\是可以的
但在java中写的时候要注意这样写:
"insert into t_test values(1, 'd:\\\\abc')"
这里需要使用相对路径,相对于你项目的路径。
如果有帮助到你,请点击采纳