smartupload组件(文件上传功能)
smartupload组件:完成上传文件功能。一般使用表单的file元素:
<form >
??????上传图片:<input type="file"name="pic">
</form>
常见的上传组件:
Smartupload和Apache公司的Fileupload
上传:
完成上传功能需要smartupload组件的支持,也就是smartupload.jar文件,将他放到根目录下的WEB-INF下的lib文件夹中。
注意:开发中表单中上传文件时,表单的提交方式一定要设置成post。
图片上传(表单封装)范例:图片上传
upload.jsp
<%@pagecontentType="text/html;charset=gb2312"%>
<html>
??????<body>
?????????????<form action="smart.jsp" method="post">
????????????????????上传图片:<input type="file"name="pic">
????????????????????<input type="submit" value="上传">
?????????????</form>
??????</body>
</html>
smart.jsp
根目录下建立一个名为upload的文件夹。用于存放上传的文件。
<%@ page language="java"import="java.util.*" pageEncoding="GBK"%>
<jsp:useBean id="smartupload"style="width: 426.1pt; padding: 0cm 5.4pt;">
<%@pagecontentType="text/html;charset=gb2312"%>
<html>
??????<body>
?????????????<form action="smart.jsp" method="post" enctype="multipart/form-data">
????????????????????上传图片:<input type="file"name="pic">
????????????????????<input type="submit" value="上传">
?????????????</form>
??????</body>
</html>
运行结果:正常上传。而且文件名称与上传前的名称一致。
表单封装后,request无法取得参数范例:
修改upload.jsp
<%@pagecontentType="text/html;charset=gb2312"%>
<html>
??????<body>
?????????????<form action="smart.jsp" method="post">
姓名:<input type=”text”name=”name”><br>
????????????????????上传图片:<input type="file"name="pic">
????????????????????<input type="submit" value="上传">
?????????????</form>
??????</body>
</html>
修改smart.jsp
<%@ page language="java"import="java.util.*" pageEncoding="GBK"%>
<jsp:useBean id="smartupload"style="width: 426.1pt; padding: 0cm 5.4pt;">
<%@ page language="java"import="java.util.*" pageEncoding="GBK"%>
<jsp:useBean id="smartupload"style="width: 426.1pt; border-collapse: collapse; border: medium none;">
<%@ page language="java"import="java.util.*" pageEncoding="GBK"%>
<jsp:useBean id="smartupload"style="width: 426.1pt; padding: 0cm 5.4pt;">
importjava.text.SimpleDateFormat;
importjava.util.Random;
?
publicclass IPTimeStamp {
??????private String ip;
?
??????public IPTimeStamp() {
??????}
?
??????public IPTimeStamp(String ip) {
?????????????this.ip = ip; // 通过IPTimeStamp的构造方法设置ip地址
??????}
???//生成时间的方法,例如:20111201213523
??????public String getTimeStamp() {
?????????????String temp = null;
?????????????SimpleDateFormat sdf = newSimpleDateFormat("yyyyMMddHHmmssSSS");
?????????????temp = sdf.format(new java.util.Date());
?????????????return temp;
??????}
???//生成我们要求的格式的IP
??????public String getIPTimeStampRand() {
?????????????StringBuffer buf = new StringBuffer();
?????????????if (ip != null) {
????????????????????String str[] = this.ip.split("\\.");//按照“.“来拆分
????????????????????for (int i = 0; i < str.length; i++) {
???????????????????????????buf.append(this.addZero(str[i], 3));//将拆分完的并且补0之后的放入buf
????????????????????}
?????????????}
?????????????buf.append(this.getTimeStamp());//将生成好格式的时间放入buf
?????????????Random rand = new Random();
?????????????for (int i = 0; i < 3; i++) {
????????????????????buf.append(rand.nextInt(10)) ;//将生成好的随机数放入buf
?????????????}
?????????????return buf.toString() ;
??????}
???//ip被拆分后怎么补0的方法
??????private String addZero(String str, int len) {
?????????????StringBuffer s = new StringBuffer();
?????????????s.append(str);
?????????????while (s.length() < len) {
????????????????????s.insert(0, "0");
?????????????}
?????????????return s.toString();//返回生成好的文件名称
??????}
}
修改upload.jsp
<%@pagecontentType="text/html;charset=gb2312"%>
<html>
??????<body>
?????????????<form action="smart.jsp" method="post">
????????????????????上传图片:<input type="file"name="pic">
????????????????????<input type="submit" value="上传">
?????????????</form>
??????</body>
</html>
修改smart.jsp
<%@ page language="java"import="java.util.*" pageEncoding="GBK"%>
<%@ pageimport="org.lxh.util.*"%>
<jsp:useBean id="smartupload"+ name ;//将上传好的文件放到虚拟目录下的upload文件夹下
?????????????smartupload.getFiles().getFile(0).saveAs(fileName) ;
??????%>
??????<imgsrc="upload/<%=name%>" width="300"height="200">
??????</body>
</html>
上传说明一般在系统开发中,需要将一些图片的信息保存在数据库中。一般有两种方式。
第一种:
??????直接在数据库中保存图片信息,通过BLOG字段存储。
????????如果上传文件比较大,那么这种方式不方便。
如果数据库备份时,仅仅备份数据库即可。
第二种:
?????????????直接将图片放到指定的文件夹中,然后在数据库中以普通文本的信息保存图片的路径。
?????????????如果上传文件比较大,那么这种方式方便。
?????????????如果数据库备份时,不仅得备份数据库,还有备份图片信息。
范例:保存图片路径。(第二种方式)
有如下数据库脚本(Oracle)
DROPSEQUENCE myseq ;
DROP TABLEperson ;
CREATESEQUENCE myseq ;
CREATETABLE person(
??????id??????????NUMBER????????????PRIMARY KEY NOT NULL ,
??????name?????????????VARCHAR2(60)???NOT NULL ,
??????photo????????????VARCHAR2(100)?
);
完成两个功能:1.插入信息。2.从数据库中将全部的信息列表显示。
insert.htm
<html>
??????<body>
?????????????<form action="insert.jsp" method="post"enctype="multipart/form-data">
????????????????????姓名:<inputtype="text"name="name"><br>
????????????????????上传的图片:<input type="file"name="pic"><br>
????????????????????<input type="submit" value="上传">
?????????????</form>
??????</body>
</html>
之后建立一个连接数据库类,用于连接数据库操作。
DataBaseConnection.java
importjava.sql.Connection;
importjava.sql.DriverManager;
importjava.sql.SQLException;
?
publicclass DataBaseConnection {
??????public static final String DBDRIVER ="oracle.jdbc.driver.OracleDriver" ;
??????public static final String DBURL ="jdbc:oracle:thin:@localhost:1521:MLDN" ;
??????public static final String DBUSER = "scott" ;
??????public static final String DBPASS = "tiger" ;
??????private Connection conn? = null ;
??????public DataBaseConnection(){
?????????????try {
????????????????????Class.forName(DBDRIVER) ;
????????????????????conn = DriverManager.getConnection(DBURL,DBUSER,DBPASS);
?????????????} catch (ClassNotFoundException e) {
????????????????????// TODO Auto-generated catch block
????????????????????e.printStackTrace();
?????????????} catch (SQLException e) {
????????????????????// TODO Auto-generated catch block
????????????????????e.printStackTrace();
?????????????}
??????}
??????public Connection getConnection(){
?????????????return this.conn ;
??????}
??????public void close(){
?????????????if(this.conn!=null){
????????????????????try {
???????????????????????????this.conn.close() ;
????????????????????} catch (SQLException e) {
???????????????????????????e.printStackTrace();
????????????????????}
?????????????}
??????}
}
insert.jsp
<%@ page language="java"import="java.util.*" pageEncoding="GBK"%>
<%@ pageimport="java.sql.*"%>
<%@ pageimport="org.lxh.util.*"%>
<jsp:useBean id="smartupload"+smartupload.getFiles().getFile(0).getFileExt() ;
?????????????String sql = "INSERT INTO person(id,name,photo) VALUES(myseq.nextVal,?,?)" ;
?????????????PreparedStatement pstmt = dbc.getConnection().prepareStatement(sql);
?????????????pstmt.setString(1,smartupload.getRequest().getParameter("name"));
?????????????pstmt.setString(2,photoname) ;
?????????????pstmt.executeUpdate() ;
?????????????pstmt.close() ;
?????????????String fileName = this.getServletContext().getRealPath("/") +"upload/" + photoname ;
?????????????smartupload.getFiles().getFile(0).saveAs(fileName) ;
??????}catch(Exception e){
??????}finally{
????????????dbc.close() ;
??????}
??????%>
??????</body>
</html>
显示
list.jsp
<%@ page language="java"import="java.util.*" pageEncoding="GBK"%>
<%@ pageimport="java.sql.*"%>
<%@ pageimport="org.lxh.util.*"%>
<jsp:useBean id="dbc";
?????????????PreparedStatement pstmt = dbc.getConnection().prepareStatement(sql);
?????????????ResultSet rs = pstmt.executeQuery() ;
??????%>
?????????????<center>
?????????????<table border="1"width="80%">
????????????????????<tr>
???????????????????????????<td>编号</td>
???????????????????????????<td>姓名</td>
???????????????????????????<td>照片</td>
????????????????????</tr>
?????????????<%
????????????????????while(rs.next()){
???????????????????????????int id = rs.getInt(1) ;
???????????????????????????String name = rs.getString(2) ;
???????????????????????????String photo = rs.getString(3) ;
?????????????%>
????????????????????<tr>
???????????????????????????<td><%=id%></td>
???????????????????????????<td><%=name%></td>
???????????????????????????<td><imgsrc="upload/<%=photo%>" width="30"height="25"></td>
????????????????????</tr>
?????????????<%
????????????????????}
?????????????%>
?????????????</table>
?????????????</center>
??????<%
?????????????pstmt.close() ;
??????}catch(Exception e){
??????}finally{
?????????????dbc.close() ;
??????}
??????%>
??????</body>
</html>