待整理。。。blob。。。从页面存图片到数据库或本地的方法

通常对用户上传的图片需要保存到数据库中。解决方法一般有两种:一种是将图片保存的路径存储到数据库;另一种是将图片以二进制数据流的形式直接写入数据库字段中。以下为具体方法:
  一、保存图片的上传路径到数据库:
  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 此博文包含图片 (2016-02-01 21:10:34)转载▼
标签: 杂谈 分类: 信息技术
http://www.blogjava.net/tunaic/archive/2009/05/18/271317.html
Posted on 2009-05-18 13:51 三羽 阅读(1367) 评论(0) 编辑 收藏 所属分类: JAVA资料 将图片文件写入数据库BLOB
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();
}
}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在 JSP 页面读取数据库BLOB 类型的值并打印图片,可以使用以下步骤: 1. 在 JSP 页面引入数据库连接的 Java 类,并创建一个连接对象。 2. 写一个 SQL 查询语句,查询包含 BLOB 类型的字段的数据。 3. 执行查询语句,并使用 ResultSet 对象获取查询结果。 4. 使用 ResultSet 对象的 getBinaryStream 方法获取 BLOB 类型字段的二进制流。 5. 将二进制流输出到 JSP 页面,同时设置输出的内容类型为图片格式。 以下是一个简单的示例代码: ```java <%@ page import="java.sql.*" %> <% Connection conn = null; PreparedStatement pstmt = null; ResultSet rs = null; try { // 创建连接对象 Class.forName("com.mysql.jdbc.Driver"); String url = "jdbc:mysql://localhost:3306/test"; String user = "root"; String password = "123456"; conn = DriverManager.getConnection(url, user, password); // 查询BLOB类型的字段 String sql = "SELECT blob_field FROM my_table WHERE id = ?"; pstmt = conn.prepareStatement(sql); pstmt.setInt(1, 1); rs = pstmt.executeQuery(); // 获取BLOB类型字段的二进制流并输出 if (rs.next()) { InputStream is = rs.getBinaryStream("blob_field"); response.setContentType("image/jpeg"); OutputStream os = response.getOutputStream(); byte[] buffer = new byte[1024]; int length; while ((length = is.read(buffer)) != -1) { os.write(buffer, 0, length); } os.close(); } } catch (Exception e) { e.printStackTrace(); } finally { try { if (rs != null) rs.close(); if (pstmt != null) pstmt.close(); if (conn != null) conn.close(); } catch (Exception e) { e.printStackTrace(); } } %> ``` 注意,这只是一个简单的示例,实际应用需要根据具体情况进行修改。同时,需要确保数据库存储BLOB 类型数据是图片类型的。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值