实现文件上传和下载完整案例
来源:互联网 发布:超人软件倒闭 编辑:程序博客网 时间:2024/05/21 17:41
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; //设置允许上传文件的总长度为20兆 String filedir="/files/"; //设置存放文件的目录(该目录位于web应用根目录下) 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<count;i++){ //逐个获取上传的文件 File file=files.getFile(i); if(!file.isMissing()){ //如果有文件 mark=true; int filesize=file.getSize(); if(filesize==0) message+="<li>文件 <b><font color='red'>"+file.getFilePathName()+"</font></b> 的大小为0!本系统不允许上传0字节的文件!</li><br>"; else{ String filename=file.getFileName(); //获取上传文件的名称 String filetype=file.getContentType().trim(); String savename=StringHandler.getSerial(date,i)+"."+file.getFileExt(); String fileinfo=myup.getRequest().getParameter("fileinfo"+(i+1)); String uptime=StringHandler.timeTostr(date); FileBean filebean=new FileBean(); filebean.setFileName(filename); filebean.setSaveName(savename); filebean.setFileType(filetype); filebean.setFileSize(filesize); filebean.setFileInfo(fileinfo); filebean.setUptime(uptime); k=fileDao.addFileInfo(filebean); //保存文件信息到数据库中 if(k<=0) //信息保存失败! message+="●文件 <b><font color='red'>"+file.getFilePathName()+"</font></b> 上传失败!<br>"; else{ file.saveAs(filedir+savename,File.SAVEAS_VIRTUAL); //保存文件到磁盘的指定目录下 message+="●文件 <b><font color='red'>"+file.getFilePathName()+"</font></b> 上传成功!<br>"; } } } } if(!mark) message="●请至少选择一个要上传的文件!<br>"; fileDao.closed(); }catch(java.lang.SecurityException e1){ k=-1; message="●上传的文件总大小不允许超过"+(maxsize/1024/1024)+"兆!<br>"; e1.printStackTrace(); } catch(Exception e2){ k=-1; message="●文件上传失败!<br>"; e2.printStackTrace(); }catch(java.lang.OutOfMemoryError e3){ k=-1; message="●您上传的文件太大!<br>"; e3.printStackTrace(); } if(k<=0) message+="<a href='javascript:window.history.go(-1)'>>> 返回重试</a><br>"; else message+="<a href='uploadfile.jsp'>>> 继续上传</a><br>"; message+="<a href='index.jsp'>>> 返回主页</a>"; request.setAttribute("message",message); RequestDispatcher rd=request.getRequestDispatcher("/message.jsp"); rd.forward(request,response); }
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="× 下载失败!文件 <b><font color='red'>"+file.getFileName()+"</font></b> 不存在或已经被删除!<br>"; message+="<a href='javascript:window.history.go(-1)'>返回</a>"; request.setAttribute("message",message); RequestDispatcher rd=request.getRequestDispatcher("/message.jsp"); rd.forward(request,response); } }}
0 0
- 实现文件上传和下载完整案例
- 文件上传与下载完整案例
- 文件上传和下载案例
- spring实现文件上传和下载 完整方案
- spring实现文件上传和下载完整方案
- 文件下载和实现案例
- 小案例:文件上传 和下载
- asp.net Web Services上传和下载文件(完整代码)
- JSP+Servlet实现文件上传及下载案例
- Java乔晓松-文件的上传和下载(Web)案例
- shell实现ftp上传和下载文件
- servlet实现文件上传和下载
- GWT 实现文件上传和下载
- Java实现文件上传和下载
- php实现文件的上传和下载
- Struts2实现文件上传和下载
- MFC实现文件下载和上传
- GWT 实现文件上传和下载
- jQuery 匹配正整数
- CSS命名规范
- 网站智能客服--图灵机器人接入方式
- 面试步步受挫,在打击中成长
- jQuery 关于时间的相互转化
- 实现文件上传和下载完整案例
- ARC小解(二)
- 使用递归和非递归方式反转单向链表
- Javascript--函数技巧
- 欢迎使用CSDN-markdown编辑器
- Android SDK Manager 更新代理
- poj 1942 paths on a grid
- 关于"树(Tree, UVa548)“的记录
- Elasticsearch实现与mysql的数据库的同步