通常对用户上传的图片需要保存到数据库中。解决方法一般有两种:一种是将图片保存的路径存储到数据库;另一种是将图片以二进制数据流的形式直接写入数据库字段中。以下为具体方法:
  一、保存图片的上传路径到数据库:

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;


  采用俩种方式可以根据实际需求灵活选择。


import java.sql.*; 
 import oracle.sql.*; 
 import java.io.*; 
 import oracle.jdbc.driver.OracleResultSet; 
 public class WriteBlob { 
 public static void main(String[] args) { 
 try { 
 // 连接数据库 
 //Class.forName(“sun.jdbc.odbc.JdbcOdbcDriver”); 
 //Connection conn = DriverManager.getConnection(“jdbc:odbc:Yzl”,”pda”,”pwpda”); 
 Class.forName(“oracle.jdbc.driver.OracleDriver”); 
 Connection conn = DriverManager.getConnection(“jdbc:oracle:thin:@127.0.0.1:1521:SISSI”,”pda”,”pwpda”); 
 conn.setAutoCommit(false); 
 // 获取源照片数据 
 BLOB blob = null; 
 Blob blob2 = null; 
 String fileName = “c:\01.jpg”; 
 File f = new File(fileName); 
 // 先插入一条记录,用于后面获得一个Blob对象 
 PreparedStatement pstmt = conn.prepareStatement(“insert into javatest(PICNAME,content) values(?,empty_blob())”); 
 pstmt.setString(1,”Yzl”); 
 pstmt.executeUpdate(); 
 pstmt.close(); 
 // 获得Blob对象(由于Blob是接口,不能实例化,所以只好用这种曲折方法获得) 
 pstmt = conn.prepareStatement(“SELECT content FROM JAVATEST WHERE trim(PICNAME)=? “); 
 pstmt.setString(1,”Yzl”); 
 ResultSet rset = pstmt.executeQuery(); 
 if (rset.next()) blob = (BLOB)rset.getBlob(1); 
 pstmt.close(); 
 if (blob == null){ 
 System.out.println(“blob is null”); 
 conn.close(); 
 return ; 
 } 
 // 填充Blob值,用于提交到数据库 
 FileInputStream fin = new FileInputStream(f); 
 System.out.println(“file size = ” + fin.available()); 
 OutputStream out = blob.getBinaryOutputStream(); 
 byte[] data = new byte[(int)fin.available()]; 
 // 获取 
 fin.read(data); 
 out.write(data); 
 // 关闭资源 
 fin.close(); 
 out.close(); 
 // 插入数据库 
 pstmt = conn.prepareStatement(“update javatest set content=? where PICNAME=?”); 
 pstmt.setBlob(1,blob); 
 pstmt.setString(2,”Yzl”); 
 pstmt.executeUpdate(); 
 pstmt.close(); 
 // 提交 
 conn.commit(); 
 // 获取数据库中的照片 
 pstmt = conn.prepareStatement(“SELECT content FROM JAVATEST WHERE trim(PICNAME)=? “); 
 pstmt.setString(1,”Yzl”); 
 rset = pstmt.executeQuery(); 
 if (rset.next()) blob = (BLOB)((OracleResultSet)rset).getBLOB(1); 
 pstmt.close(); 
 if (blob == null){ 
 System.out.println(“blob2 is null”); 
 conn.close(); 
 return ; 
 } 
 // 输出到磁盘 
 // 获得 
 FileOutputStream fout = new FileOutputStream(new File(“c:\02.jpg”)); 
 InputStream in = blob.asciiStreamValue(); 
 data = new byte[(int)in.available()]; 
 System.out.println(“数据库中照片的字节数:”+in.available()); // 此句总是为 0 不知道为什么,有谁知道吗? 
 // 输出 
 in.read(data); 
 fout.write(data); 
 // 关闭资源 
 fin.close(); 
 out.close(); 
 conn.close(); 
 // 打开 
 //Process pro = Runtime.getRuntime().exec(“cmd /c start c:\02.jpg”); 
 } catch (SQLException e) { 
 System.err.println(e.getMessage()); 
 e.printStackTrace(); 
 } catch (IOException e) { 
 System.err.println(e.getMessage()); 
 } catch(ClassNotFoundException e){ 
 e.printStackTrace(); 
 } 
 } 
 }