1、创建用于保存文件的JavaBean
创建该JavaBean用于保存文件的信息,以便在向数据库中保存数据时作为一个容器进行传递
package com.valuebean;
import com.toolsbean.StringHandler;
public class FileBean {
private int id;
private String saveName;
private String fileName;
private String fileType;
private int fileSize;
private String fileInfo;
private String uptime;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getSaveName() {
return saveName;
}
public void setSaveName(String saveName) {
this.saveName = saveName;
}
public String getFileName() {
return fileName;
}
public void setFileName(String fileName) {
this.fileName = fileName;
}
public String getFileType() {
return fileType;
}
public void setFileType(String fileType) {
this.fileType = fileType;
}
public String getFileInfo() {
return fileInfo;
}
public String getFileInfoForShow() {
return StringHandler.changehtml(fileInfo);
}
public void setFileInfo(String fileInfo) {
this.fileInfo = fileInfo;
}
public int getFileSize() {
return fileSize;
}
public void setFileSize(int fileSize) {
this.fileSize = fileSize;
}
public String getUptime() {
return uptime;
}
public void setUptime(String uptime) {
this.uptime = uptime;
}
}
2、创建文件上传的主页面
该页面实现一个Form表单,并设置表单的 enctype=”multipart/form-data” method=”post”属性
<%@ page contentType="text/html;charset=gb2312"%>
<html>
<head>
<title>上传文件title>
<link type="text/css" rel="stylesheet" href="css/style.css">
head>
<body bgcolor="#E1E1E1">
<center>
<table border="1" bordercolor="#BFD3E1" bordercolorlight="#BFD3E1" bordercolordark="white" cellpadding="0" cellspacing="0" rules="cols">
<tr><td colspan="2"><img src="images/top.jpg" width="833">td><tr>
<tr height="30" bgcolor="black">
<td colspan="2" style="text-indent:20">
<a style="color:white" href="index.jsp">首页a>
<a style="color:white" href="downloadview">下载文件a>
td>
tr>
<form action="upload" enctype="multipart/form-data" name="uploadform" method="post">
<tr>
<td width="22%" align="center" valign="top" bgcolor="#F7FAF6" style="padding-top:8">
<div style="background:#177B6C;width:94%;height:25;color:white"><b>注意事项:b>div>
●文件长度最大允许为50兆!
td>
<td valign="top" style="padding-left:30;padding-top:10" bgcolor="white">
<img src="images/title.jpg"><br><br>
文件路径1:<br>
<input type="file" name="file1" size="60"><br>
文件描述1:<br>
<textarea rows="5" cols="69" name="fileinfo1">textarea><br>
<hr color="black">
文件路径2:<br>
<input type="file" name="file2" size="60"><br>
文件描述2:<br>
<textarea rows="5" cols="69" name="fileinfo2">textarea><br>
<input type="button" style="border:0;background:url(images/submit.jpg);width:74;height:21" value="" onclick="uploadform.submit()">
<input type="reset" style="border:0;background:url(images/reset.jpg);width:74;height:21" value="">
<br><br>
td>
tr>
form>
<tr><td colspan="2"><img src="images/end.jpg" width="833">td><tr>
table>
form>
center>
body>
html>
3、创建MyFileServlet
该Servlet用来接收并处理文件上传与下载的请求,在该类的doPost()方法中将根据用户请求调用相应的方法处理请求。
package com.servlet;
import java.io.IOException;
import java.sql.SQLException;
import java.util.Date;
import java.util.List;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.dao.FileDao;
import com.jspsmart.upload.File;
import com.jspsmart.upload.Files;
import com.jspsmart.upload.SmartUpload;
import com.toolsbean.StringHandler;
import com.valuebean.FileBean;
public class MyFileServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {
doPost(request, response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {
String servletPath=request.getServletPath();
if("/upload".equals(servletPath))
upload(request,response);
else if("/downloadview".equals(servletPath))
downloadview(request,response);
else if("/downloadrun".equals(servletPath))
downloadrun(request,response);
}
private void upload(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {
String message="";
long maxsize=1024*1024*20;
String filedir="/files/";
int k=0;
try{
SmartUpload myup=new SmartUpload();
myup.initialize(this,request,response);
myup.setTotalMaxFileSize(maxsize);
myup.upload();
Files files=myup.getFiles();
int count=files.getCount();
Date date=new Date();
boolean mark=false;
FileDao fileDao=new FileDao();
for(int i=0;i
4、创建FileDao类
在MyFileServlet.java中,在获取文件信息并封装到一个FileBean类对象中后,调用了FileDao类的addFileInfo()方法将文件信息保存到了数据库中,FileDao类用来实现基于数据库的各种操作
package com.dao;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import com.toolsbean.DB;
import com.toolsbean.StringHandler;
import com.valuebean.FileBean;
public class FileDao {
private DB mydb=null;
public FileDao(){
mydb=new DB();
}
public int addFileInfo(FileBean file){
int i=-1;
String sql="insert into tb_file values(?,?,?,?,?,?)";
Object[] params={file.getSaveName(),file.getFileName(),file.getFileType(),file.getFileSize(),file.getFileInfo(),file.getUptime()};
mydb.doPstm(sql, params);
try {
i=mydb.getCount();
} catch (SQLException e) {
i=-1;
e.printStackTrace();
}
return i;
}
public FileBean getFileSingle(String savename) throws SQLException{
FileBean single=null;
String sql="select * from tb_file where file_savename=?";
Object[] params={savename};
List list=getList(sql,params);
if(list!=null&&list.size()!=0)
single=(FileBean)list.get(0);
return single;
}
public void closed(){
mydb.closed();
}
}
5、实现文件下载
在MyFileServlet中创建downloadview()方法,该方法将调用FileDao类中的getFileList()方法获取数据库中的所有文件并保存,然后转发到文件下载主页面进行列表显示。
downloadview():
private void downloadview(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {
FileDao fileDao=new FileDao();
try {
List filelist = fileDao.getFileList();
request.setAttribute("filelist",filelist);
} catch (SQLException e) {
e.printStackTrace();
}
fileDao.closed();
RequestDispatcher rd=request.getRequestDispatcher("/downloadfile.jsp");
rd.forward(request,response);
}
getFileList():
public List getFileList() throws SQLException{
String sql="select * from tb_file order by file_savename desc";
List list=getList(sql,null);
return list;
}
getList():
private List getList(String sql,Object[] params) throws SQLException{
List list=null;
mydb.doPstm(sql, params);
ResultSet rs=mydb.getRs();
if(rs!=null){
list=new ArrayList();
while(rs.next()){
FileBean single=new FileBean();
single.setId(rs.getInt(1));
single.setSaveName(rs.getString(2));
single.setFileName(rs.getString(3));
single.setFileType(rs.getString(4));
single.setFileSize(rs.getInt(5));
single.setFileInfo(rs.getString(6));
single.setUptime(StringHandler.timeTostr(rs.getTimestamp(7)));
list.add(single);
}
rs.close();
}
return list;
}
在MyFileServlet中创建downloadrun()fangfa
在该方法中,首先获取请求中传递的要下载的文件名称,然后判断该文件是否存在数据库中,若存在,则调用jspSmartUpload组件实现文件下载
private void downloadrun(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {
String filedir="/files/";
String downfilename=request.getParameter("downname");
FileBean file=null;
try{
FileDao fileDao=new FileDao();
file=fileDao.getFileSingle(downfilename);
fileDao.closed();
if(file!=null){
String filename=new String(file.getFileName().getBytes("gb2312"),"ISO-8859-1");
SmartUpload mydown=new SmartUpload();
mydown.initialize(getServletConfig(),request,response);
mydown.setContentDisposition(null);
mydown.downloadFile(filedir+downfilename,file.getFileType(),filename);
}
}catch(Exception e){
e.printStackTrace();
String message="× 下载失败!文件 "+file.getFileName()+" 不存在或已经被删除!
";
message+="返回";
request.setAttribute("message",message);
RequestDispatcher rd=request.getRequestDispatcher("/message.jsp");
rd.forward(request,response);
}
}
}