【JSP】上传图片到数据库中

时间:2024-02-19 13:25:50
 1 第一步:建立数据库 
 2 create table test_img(id number(4),name varchar(20),img long raw); 
 3 第二步:(NewImg.html) 
 4 <html><head><title>添加图片</title></head> 
 5 <body> 
 6 添加图片<br> 
 7 <form method="post" action="insertNews.jsp"> 
 8 图像ID:<input name="id" size="10"> 
 9 <br> 
10 选择图像:<input type="file" name="image"> 
11 <br> 
12 <input type="submit" value="上传" name="submit" size="25"> 
13 <input type="reset" value="清除" name="clear" size="25"> 
14 <br> 
15 </form> 
16 </body></html> 
17 第三步:插入数据库(InsertImg.jsp) 
18 <%@ page language="java"%> 
19 <%@ page contentType="text/html;charset=gb2312" %> 
20 <%@ page import="java.util.*" %> 
21 <%@ page import="java.sql.*"%> 
22 <%@ page import="java.text.*"%> 
23 <%@ page import="java.io.*"%> 
24 <% 
25 Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver"); //com.microsoft.jdbc.sqlserver.SQLserveDriver
26 String url="jdbc:oracle:thin:@lubin:1521:b2bdb";               //jdbc:microsoft:sqlserver://127.0.0.1:1433;  jdbc:microsoft.sqlserver://127.0.0.1:1433
27 Connection con=DriverManager.getConnection(url,"demo","demo"); 
28 //插入数据库 
29 String sql="insert into test_img values (?,?,?)"; 
30 //获取传值ID 
31 String id=request.getParameter("id"); 
32 //获取image的路径 
33 String kk=request.getParameter("image"); 
34 //转换成file格式 
35 File filename=new File(kk); 
36 //将文件的长度读出,并转换成Long型 
37 long l1=filename.length(); 
38 int l2=(int)l1; 
39 //以流的格式赋值 
40 FileInputStream fis=new FileInputStream(filename); 
41 PreparedStatement ps =con.prepareStatement(sql); 
42 ps.setString(1,id); 
43 ps.setString(2,filename.getName()); 
44 ps.setBinaryStream(3,fis,l2); 
45 //ps.setBinaryStream(3,fis,fis.available()); 
46 ps.executeUpdate(); 
47 //ps.execute(); 
48 ps.close(); 
49 fis.close(); 
50 out.println("ok!!!"); 
51 %> 
52 第四步:显示图片(ShowImg.jsp) 
53 <%@ page language="java" import="java.sql.*"%> 
54 <%@ page import="java.io.*"%> 
55 <%@ page contentType="text/html;charset=gb2312"%> 
56 <% 
57 Class.forName("oracle.jdbc.driver.OracleDriver"); 
58 String url="jdbc:oracle:thin:@lubin:1521:b2bdb"; 
59 String image_id = (String) request.getParameter("ID"); 
60 Connection con=DriverManager.getConnection(url,"demo","demo"); 
61 PreparedStatement sql=con.prepareStatement("select * from test_img WHERE id = " + image_id); 
62 ResultSet rs = sql.executeQuery(); 
63 rs.next(); 
64 //输入img字段内容到in 
65 InputStream in = rs.getBinaryStream("img"); 
66 //以下可是任何处理,比如向页面输出: 
67 response.reset(); 
68 response.setContentType("image/jpeg"); 
69 byte[] b = new byte[1024]; 
70 int len; 
71 while((len=in.read(b)) >0) 
72 response.getOutputStream().write(b,0,len); 
73 in.close(); 
74 rs.close(); 
75 %>

上传页面 一定要用POST 还要l加一个属性 enctype="multipart/form-data", 进去了才解析请求体才能得到的

你写 <file name="filename" /> 你在服务端 request.getParameter("filename"); 是得不到的
因为这些数据和 上传的文件流都封装在请求体中, 要解析的

你如果只要文件名: 可以这样
<file name="file" />
<hidden type="text" name="filename" /> 

 

<%--
类型enctype用multipart/form-data,这样可以把文件中的数据作为流式数据上传,不管是什么文件类型,均可上传。
--%>