- 浏览: 113504 次
- 性别:
文章分类
- 全部博客 (390)
- java开发 (0)
- Struts2框架 (0)
- Spring3框架 (0)
- Spring4框架 (0)
- Hibernate3框架 (0)
- Hibernate4框架 (0)
- jQuery前台技术 (0)
- ExtJs3前台技术 (2)
- ExtJs4前台技术 (0)
- javascript脚本语言 (0)
- Oracle数据库 (0)
- MySQL数据库 (0)
- SQL Server数据库 (0)
- JSTL与EL (0)
- Ajax技术 (0)
- DWR技术 (0)
- Ibatis技术 (0)
- Mybatis技术 (0)
- JBPM工作流 (0)
- xstream技术 (0)
- 框架整合技术 (0)
最新评论
java web 实现上传下载
jsp页面代码:
- <%@pagelanguage="java"contentType="text/html;charset=UTF-8"
- pageEncoding="UTF-8"%>
- <%@tagliburi="http://java.sun.com/jsp/jstl/core"prefix="c"%>
- <!DOCTYPEhtmlPUBLIC"-//W3C//DTDHTML4.01Transitional//EN""http://www.w3.org/TR/html4/loose.dtd">
- <html>
- <head>
- <metahttp-equiv="Content-Type"content="text/html;charset=UTF-8">
- <title>上传文件</title>
- </head>
- <body>
- <fontcolor="red"size="3px"><b>${error}</b></font>
- <tableborder="1"width="60%">
- <tr>
- <th>用户名</th>
- <th>性别</th>
- <th>头像</th>
- <th>IP地址</th>
- <th>上传文件名</th>
- <th>操作</th>
- </tr>
- <c:forEachitems="${list}"var="user">
- <tr>
- <td>${user.name}</td>
- <td>${user.sex==true?"男":"女"}</td>
- <td><imgsrc="${user.pic}"height="120"></td>
- <td>${user.ip}</td>
- <td>${user.fileName}</td>
- <td><ahref="/upload?mode=download&id=${user.id}">下载</a></td>
- </tr>
- </c:forEach>
- </table>
- <formaction="/upload?mode=upload"method="post">
- <inputtype="submit"value="去上传..."/>
- </form>
- </body>
- </html>
jsp页面代码:
- <%@pagelanguage="java"contentType="text/html;charset=UTF-8"
- pageEncoding="UTF-8"%>
- <%@tagliburi="http://java.sun.com/jsp/jstl/core"prefix="c"%>
- <!DOCTYPEhtmlPUBLIC"-//W3C//DTDHTML4.01Transitional//EN""http://www.w3.org/TR/html4/loose.dtd">
- <html>
- <head>
- <metahttp-equiv="Content-Type"content="text/html;charset=UTF-8">
- <title>上传文件</title>
- <scripttype="text/javascript">
- vartag=true;
- functiongo(){
- if(tag){
- document.forms[0].submit();
- tag=false;
- }else{
- alert("正在提交中,请勿重复提交请求……");
- }
- }
- </script>
- </head>
- <body>
- <fontcolor="red"size="3px"><b>${error}</b></font>
- <formaction="/upload?mode=add"method="post"enctype="multipart/form-data">
- <inputtype="hidden"name="randomName"value="${randomName}"/>
- <inputtype="hidden"name="randomValue"value="${randomValue}"/>
- <table>
- <tr>
- <td>用户名:</td>
- <td><inputtype="text"name="name"/></td>
- </tr>
- <tr>
- <td>性 别:</td>
- <td><inputtype="radio"name="sex"value="true"/>男
- <inputtype="radio"name="sex"value="false"/>女
- </td>
- </tr>
- <tr>
- <td>头 像:</td>
- <td><inputtype="file"name="pic"/></td>
- </tr>
- <!--<tr>
- <td>IP地址:</td>
- <td><inputtype="text"name="ip"/></td>
- </tr>-->
- <tr>
- <td>文件名:</td>
- <td><inputtype="file"name="fileName"/></td>
- </tr>
- <tr>
- <!--<tdcolspan="2"align="center"><inputtype="button"value="提交"onclick="go()"/></td>-->
- <tdcolspan="2"align="center"><inputtype="submit"value="提交""/>
- </tr>
- </table>
- </form>
- </body>
- </html>
- packagecn.itcast.cd.domain;
- publicclassUser{
- privateLongid;
- privateStringname;
- privateBooleansex;
- privateStringpic;
- privateStringip;
- privateStringfileName;
- privateStringfilePath;
- privatelongfileSize;
- publicStringgetName(){
- returnname;
- }
- publicvoidsetName(Stringname){
- this.name=name;
- }
- publicBooleangetSex(){
- returnsex;
- }
- publicvoidsetSex(Booleansex){
- this.sex=sex;
- }
- publicStringgetFileName(){
- returnfileName;
- }
- publicvoidsetFileName(StringfileName){
- this.fileName=fileName;
- }
- publicStringgetFilePath(){
- returnfilePath;
- }
- publicvoidsetFilePath(StringfilePath){
- this.filePath=filePath;
- }
- publicLonggetId(){
- returnid;
- }
- publicvoidsetId(Longid){
- this.id=id;
- }
- publicStringgetIp(){
- returnip;
- }
- publicvoidsetIp(Stringip){
- this.ip=ip;
- }
- publicStringgetPic(){
- returnpic;
- }
- publicvoidsetPic(Stringpic){
- this.pic=pic;
- }
- publiclonggetFileSize(){
- returnfileSize;
- }
- publicvoidsetFileSize(longfileSize){
- this.fileSize=fileSize;
- }
- @Override
- publicStringtoString(){
- return"User[id="+id+",name="+name+",sex="+sex+",pic="
- +pic+",ip="+ip+",fileName="+fileName+",filePath="
- +filePath+",fileSize="+fileSize+"]";
- }
- }
IUserDAO 接口:
[java] view plaincopyprint?
[java] view plaincopyprint?
- packagecn.itcast.cd.dao;
- importjava.util.List;
- importcn.itcast.cd.domain.User;
- publicinterfaceIUserDAO{
- voidadd(Useruser);
- List<User>list();
- Userget(Longid);
- }
- packagecn.itcast.cd.daoImpl;
- importjava.sql.SQLException;
- importorg.apache.commons.dbutils.QueryRunner;
- importorg.apache.commons.dbutils.ResultSetHandler;
- importcn.itcast.cd.Utils.Utils;
- publicclassBaseDao{
- //使用DbUtils中的QueryRunner对象.
- privateQueryRunnerqueryRunner=newQueryRunner(Utils.getDataSource());
- /*
- *执行修改
- */
- publicvoidexeUpdate(Stringsql,Object...params){
- try{
- queryRunner.update(sql,params);
- }catch(SQLExceptione){
- e.printStackTrace();
- }
- }
- /*
- *执行查询
- */
- public<T>TexeQuery(Stringsql,ResultSetHandler<T>rsh,Object...params){
- try{
- returnqueryRunner.query(sql,rsh,params);
- }catch(SQLExceptione){
- e.printStackTrace();
- }
- returnnull;
- }
- }
UserDAOImpl.java实现类:
[java]
view plaincopyprint?
- packagecn.itcast.cd.daoImpl;
- importjava.util.List;
- importorg.apache.commons.dbutils.handlers.BeanHandler;
- importorg.apache.commons.dbutils.handlers.BeanListHandler;
- importcn.itcast.cd.dao.IUserDAO;
- importcn.itcast.cd.domain.User;
- publicclassUserDAOImplextendsBaseDaoimplementsIUserDAO{
- @Override
- publicvoidadd(Useruser){
- Stringsql="insertintouservalues(null,?,?,?,?,?,?)";
- Object[]params={user.getName(),user.getSex(),user.getPic(),user.getIp(),
- user.getFileName(),user.getFilePath()};
- exeUpdate(sql,params);
- }
- @Override
- publicList<User>list(){
- Stringsql="select*fromuser";
- returnexeQuery(sql,newBeanListHandler<User>(User.class));
- }
- @Override
- publicUserget(Longid){
- Stringsql="select*fromuserwhereid=?";
- returnexeQuery(sql,newBeanHandler<User>(User.class),id);
- }
- }
BaseServlet.java代码:
[java] view plaincopyprint?
- packagecn.itcast.cd.servlet;
- importjava.io.IOException;
- importjava.lang.reflect.Method;
- importjavax.servlet.ServletException;
- importjavax.servlet.http.HttpServlet;
- importjavax.servlet.http.HttpServletRequest;
- importjavax.servlet.http.HttpServletResponse;
- importorg.apache.commons.lang3.StringUtils;
- publicclassBaseServletextendsHttpServlet{
- privatestaticfinallongserialVersionUID=1L;
- @Override
- protectedvoidservice(HttpServletRequestreq,HttpServletResponseresp)
- throwsServletException,IOException{
- req.setCharacterEncoding("UTF-8");
- Stringmode=req.getParameter("mode");
- if(StringUtils.isNotBlank(mode)){
- try{
- Methodmethod=this.getClass().getMethod(mode,
- HttpServletRequest.class,HttpServletResponse.class);
- method.invoke(this,req,resp);
- }catch(Exceptione){
- e.printStackTrace();
- }
- }else{
- doMethod(req,resp);//默认调用
- }
- }
- protectedvoiddoMethod(HttpServletRequestreq,HttpServletResponseresp){
- }
- }
MyHttpServletRequest.java类:
[java] view plaincopyprint?
- packagecn.itcast.cd.servlet;
- importjava.io.File;
- importjava.io.UnsupportedEncodingException;
- importjava.util.HashMap;
- importjava.util.List;
- importjava.util.Map;
- importjava.util.UUID;
- importjavax.servlet.http.HttpServletRequest;
- importjavax.servlet.http.HttpServletRequestWrapper;
- importorg.apache.commons.fileupload.FileItem;
- importorg.apache.commons.fileupload.FileItemFactory;
- importorg.apache.commons.fileupload.FileUploadBase.SizeLimitExceededException;
- importorg.apache.commons.fileupload.FileUploadException;
- importorg.apache.commons.fileupload.disk.DiskFileItemFactory;
- importorg.apache.commons.fileupload.servlet.ServletFileUpload;
- importorg.apache.commons.io.FilenameUtils;
- importcn.itcast.cd.Utils.MyException;
- importcn.itcast.cd.Utils.UploadFileInfo;
- publicclassMyHttpServletRequestextendsHttpServletRequestWrapper{
- //装在普通表单元素的map
- privateMap<String,String>formFiledMap=newHashMap<String,String>();
- //装在上传表单元素的Map
- privateMap<String,FileItem>uploadFieldMap=newHashMap<String,FileItem>();
- BooleanisMultipartContent=false;
- publicMyHttpServletRequest(HttpServletRequestrequest){
- super(request);
- //检查是否是文件上传请求
- isMultipartContent=ServletFileUpload.isMultipartContent(request);
- if(isMultipartContent){
- //创建工程,设置上传最大的内存空间和临时文件存放位置.
- FileItemFactoryfactory=newDiskFileItemFactory(1024*1024*10,
- newFile("D:/tmp"));
- ServletFileUploadfileUpload=newServletFileUpload(factory);
- fileUpload.setFileSizeMax(1024*1024);//设置单个文件上传的最大值为1M.
- fileUpload.setSizeMax(1024*1024*5);//设置整个表单的文件上传最大值为5M.
- try{
- List<FileItem>fileItems=fileUpload.parseRequest(request);
- for(FileItemfileItem:fileItems){
- //是否是普通表单元素,即type不为file的表单元素
- if(fileItem.isFormField()){
- formFiledMap.put(fileItem.getFieldName(),
- fileItem.getString("UTF-8"));
- }else{
- if(fileItem.getSize()>0){
- uploadFieldMap.put(fileItem.getFieldName(),
- fileItem);
- }
- }
- }
- }catch(SizeLimitExceededExceptione){
- thrownewMyException("上传文件的大小超过限制!");
- }catch(FileUploadExceptione){
- e.printStackTrace();
- }catch(UnsupportedEncodingExceptione){
- e.printStackTrace();
- }
- }
- }
- //包装原来的方法
- @Override
- publicStringgetParameter(Stringname){
- //是上传文件的表单,要得到参数值,直接根据name,取存在map中的值.
- if(isMultipartContent){
- returnformFiledMap.get(name);
- }else{
- returnsuper.getParameter(name);
- }
- }
- //已经将Map修改了,覆盖原来的方法
- @Override
- publicMapgetParameterMap(){
- if(isMultipartContent){
- returnformFiledMap;
- }else{
- returnsuper.getParameterMap();
- }
- }
- /**
- *上传表单中指定表单元素中的文件.
- *
- *@paramformFieldName
- *表单中元素的名称
- *@paramtagPath
- *上传的目标目录,即服务器上存放上传文件的目录.
- *
- *@return由于上传成功后,我们需要将上传的文件名和文件地址存放到数据库,
- *也即需要返回给Servlet上传的文件信息,故将文件信息封装成一个对象返回.
- *
- */
- publicUploadFileInfoupload(StringformFieldName,StringtagPath){
- FileItemfileItem=uploadFieldMap.get(formFieldName);
- if(fileItem!=null){
- //得到文件名fileItem.getName()有些浏览器可能得到的是全路径,而这里只需要文件名
- StringsrcFileName=FilenameUtils.getName(fileItem.getName());
- longfileSize=fileItem.getSize();
- //不同的用户可能上传相同的文件名,不处理就被覆盖,所以这里需要用唯一标示进行文件区分.
- StringtagFilePath=tagPath+"/"+UUID.randomUUID().toString()+"."+FilenameUtils.getExtension(srcFileName);
- if(!tagPath.startsWith("/")){
- tagPath="/"+tagPath;
- }
- //判断目录是否存在,不存在就创建
- Filedir=newFile(getSession().getServletContext().getRealPath("/")+tagPath);
- if(!dir.exists()){
- dir.mkdirs();
- }
- //写到指定目录
- try{
- fileItem.write(newFile(getSession().getServletContext().getRealPath("/"),tagFilePath));
- }catch(Exceptione){
- e.printStackTrace();
- }
- returnnewUploadFileInfo(srcFileName,tagFilePath,fileSize);
- }
- returnnull;
- }
- }
UploadServlet.java类:
[java] view plaincopyprint?
- packagecn.itcast.cd.servlet;
- importjava.io.BufferedInputStream;
- importjava.io.BufferedOutputStream;
- importjava.io.File;
- importjava.io.FileInputStream;
- importjava.io.IOException;
- importjava.io.UnsupportedEncodingException;
- importjava.net.URLEncoder;
- importjava.util.List;
- importjava.util.UUID;
- importjavax.servlet.ServletException;
- importjavax.servlet.http.HttpServletRequest;
- importjavax.servlet.http.HttpServletResponse;
- importorg.apache.catalina.startup.SetAllPropertiesRule;
- importorg.apache.commons.lang3.StringUtils;
- importcn.itcast.cd.Utils.MyException;
- importcn.itcast.cd.Utils.UploadFileInfo;
- importcn.itcast.cd.dao.IUserDAO;
- importcn.itcast.cd.daoImpl.UserDAOImpl;
- importcn.itcast.cd.domain.User;
- /**
- *ServletimplementationclassUploadServlet
- */
- publicclassUploadServletextendsBaseServlet{
- privatestaticfinallongserialVersionUID=1L;
- IUserDAOdao=null;
- @Override
- publicvoidinit()throwsServletException{
- dao=newUserDAOImpl();
- }
- publicvoidadd(HttpServletRequestrequest,HttpServletResponseresponse)
- throwsInterruptedException{
- //request不能接收上传文件的表单参数,返回全部为null,所以用MyHttpServletRequest类进行包装,单独处理.
- //Thread.sleep(1000);
- MyHttpServletRequestmyRequest=null;
- try{
- myRequest=newMyHttpServletRequest(request);
- }catch(MyExceptione){//捕捉自定义异常,提示用户上传文件的大小限制
- request.setAttribute("error",e.getMessage());
- upload(request,response);
- return;
- }
- /*
- *从页面得到标示信息,由于是文件上传的请求,必须用myRequest
- */
- StringrandomName=myRequest.getParameter("randomName");
- StringrandomValue=myRequest.getParameter("randomValue");
- //session中的标示.
- StringrandomValueInSession=(String)myRequest.getSession().getAttribute(randomName);
- //System.out.println(randomName+""+randomValue+""+randomValueInSession);
- if(StringUtils.isNotBlank(randomValueInSession)&&
- StringUtils.isNotBlank(randomValue)&&StringUtils.isNotBlank(randomName)
- &&randomValueInSession.equals(randomValue)){
- //接收普通表单元素的参数信息
- Stringname=myRequest.getParameter("name");
- Stringsex=myRequest.getParameter("sex");
- //封装对象
- Useruser=newUser();
- user.setName(name);
- user.setSex(Boolean.parseBoolean(sex));
- Stringip=request.getRemoteAddr();
- user.setIp(ip);
- //上传头像信息
- UploadFileInfopicInfo=myRequest.upload("pic","/headPic");
- if(picInfo!=null){
- user.setPic(picInfo.getTagFilePath());
- }
- UploadFileInfofileInfo=myRequest.upload("fileName",
- "/WEB-INF/resource");
- if(fileInfo!=null){
- user.setFilePath(fileInfo.getTagFilePath());
- user.setFileName(fileInfo.getSrcFileName());
- user.setFileSize(fileInfo.getFileSize());
- }
- dao.add(user);
- //提交完成移除session中设置的随机标示
- request.getSession().removeAttribute(randomName);
- }else{
- request.setAttribute("error","重复提交请求……");
- }
- list(request,response);
- }
- publicvoidlist(HttpServletRequestrequest,HttpServletResponseresponse){
- List<User>list=dao.list();
- request.setAttribute("list",list);
- try{
- request.getRequestDispatcher("/WEB-INF/jsp/list.jsp").forward(
- request,response);
- }catch(ServletExceptione){
- e.printStackTrace();
- }catch(IOExceptione){
- e.printStackTrace();
- }
- }
- publicvoidupload(HttpServletRequestrequest,HttpServletResponseresponse){
- try{
- //防止重复提交
- StringrandomName=UUID.randomUUID().toString();
- StringrandomValue=UUID.randomUUID().toString();
- request.setAttribute("randomName",randomName);
- request.setAttribute("randomValue",randomValue);
- //当前产生的标示放到session.
- request.getSession().setAttribute(randomName,randomValue);
- request.getRequestDispatcher("/WEB-INF/jsp/upload.jsp").forward(
- request,response);
- }catch(ServletExceptione){
- e.printStackTrace();
- }catch(IOExceptione){
- e.printStackTrace();
- }
- }
- @Override
- protectedvoiddoMethod(HttpServletRequestrequest,
- HttpServletResponseresponse){
- list(request,response);
- }
- publicvoiddownload(HttpServletRequestrequest,
- HttpServletResponseresponse){
- Stringid=request.getParameter("id");
- Useruser=dao.get(Long.parseLong(id));
- //发送下载请求给浏览器
- response.setContentType("application/x-msdownload");
- try{
- //解决下载时文件名乱码问题.
- response.setHeader("Content-Disposition","attachment;filename="
- +URLEncoder.encode(user.getFileName(),"utf-8"));
- }catch(UnsupportedEncodingExceptione){
- e.printStackTrace();
- }
- BufferedOutputStreambos=null;
- BufferedInputStreambis=null;
- try{
- bos=newBufferedOutputStream(response.getOutputStream());
- bis=newBufferedInputStream(newFileInputStream(newFile(
- getServletContext().getRealPath("/"),user.getFilePath())));
- byte[]b=newbyte[1024];
- intlenth=0;
- while((lenth=bis.read(b))!=-1){
- bos.write(b,0,lenth);
- bos.flush();
- }
- }catch(IOExceptione){
- e.printStackTrace();
- }finally{
- try{
- bos.close();
- bis.close();
- }catch(IOExceptione){
- e.printStackTrace();
- }
- }
- }
- }
-
MyException.java类
[java] view plaincopyprint?
- packagecn.itcast.cd.Utils;
- publicclassMyExceptionextendsRuntimeException{
- publicMyException(Stringmessage){
- super(message);
- }
- }
UploadFileInfo.java类:
[java] view plaincopyprint?
- packagecn.itcast.cd.Utils;
- publicclassUploadFileInfo{
- privateStringsrcFileName;
- privateStringtagFilePath;
- privatelongfileSize;
- publicStringgetSrcFileName(){
- returnsrcFileName;
- }
- publicvoidsetSrcFileName(StringsrcFileName){
- this.srcFileName=srcFileName;
- }
- publicStringgetTagFilePath(){
- returntagFilePath;
- }
- publicvoidsetTagFilePath(StringtagFilePath){
- this.tagFilePath=tagFilePath;
- }
- publiclonggetFileSize(){
- returnfileSize;
- }
- publicvoidsetFileSize(longfileSize){
- this.fileSize=fileSize;
- }
- publicUploadFileInfo(StringsrcFileName,StringtagFilePath,longfileSize){
- super();
- this.srcFileName=srcFileName;
- this.tagFilePath=tagFilePath;
- this.fileSize=fileSize;
- }
- }
[java] view plaincopyprint?
- packagecn.itcast.cd.Utils;
- importjava.util.Properties;
- importjavax.sql.DataSource;
- importorg.apache.commons.dbcp.BasicDataSourceFactory;
- publicclassUtils{
- privatestaticDataSourcedataSource;
- static{
- Propertiesproperties=newProperties();
- try{
- properties.load(Utils.class.getClassLoader().getResourceAsStream("jdbc.properties"));
- dataSource=BasicDataSourceFactory.createDataSource(properties);
- }catch(Exceptione){
- e.printStackTrace();
- }
- }
- publicstaticDataSourcegetDataSource(){
- returndataSource;
- }
- }
相关推荐
采用jsp+servlet的形式实现文件的上传与下载。
和实现java web上传和下载的文件的功能,适合初学者使用
webupload上传与下载文件,web实现文件上传下载,Java源码.zip
对于javaWeb中实现上传下载,只需最简单的,拖一个Jar文件然后几行代码就OK了。。。
由于电子书太大了 只有分part01~~part16上传 需要的朋友将16个part一起下载解压就可以用 目 录 第1篇 入 门 篇 第1章 Java Web开发概述 2 1.1 Web相关概念 2 1.1.1 胖客户端程序RCP 2 1.1.2 瘦客户端程序TCP 2 ...
断点续传,springboot+webuploader +mysql 实现断点续传功能
java web 网站,实现网页直接上传文件,强悍支持断点下载功能, 今天公司,做项目的时候突然客户需要,在页面实现上传文件,并且还得支持断点续传的功能,郁闷啊,只得花时间去弄了,一般现在网上说的都是用FTP的...
完整的java上传下载源码。包含两种实现方式:1.web端上传下载 2.java接口实现断点上传。绝对可用。研究了好久总结的代码。
这个是基于java代码实现的。直接放在tomcat7/8中运行就行,实现上传和下载,目录修改为/FileUploadAndDownLoad/WEB-INF/upload。上传和下载均为此目录。界面实现跳转下载和上传功能。大小限制10M。下载不限制。
java web开发实现文件上传下载,java代码部分的实现,
这是一个简单的文件上传的案例,使用Struts实现!
vs2013 c++实现上传的客户端,服务端为java写的web工程,模拟post方法,可以上传大文件
本文介绍了在Java中,如何使用Java现有的可用的库来编写FTP客户端代码,并开发成Applet控件,做成基于Web的批量、大文件的上传下载控件。文章在比较了一系列FTP客户库的基础上,就其中一个比较通用且功能较强的j-ftp...
基于Java Web技术实现的一个网上订餐系统源码.zip基于Java Web技术实现的一个网上订餐系统源码.zip基于Java Web技术实现的一个网上订餐系统源码.zip基于Java Web技术实现的一个网上订餐系统源码.zip基于Java Web技术...
件上传和下载是web开发中常遇到的问题。今天小编给大家分享下Java Web实现文件下载和乱码处理方法的相关资料,需要的朋友可以参考下
已经实现上传功能,希望对你有帮助。相应的jar包已经包含。 Eclipse,JDK1.6,Tomcat7
运用了DAO设计模式实现一个上传的功能,适用于学习者,自己写的