第一步:建立数据库
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,这样可以把文件中的数据作为流式数据上传,不管是什么文件类型,均可上传。
--%>
在JSP中上传图片到数据库中
标签: