- 浏览: 175739 次
- 性别:
- 来自: 成都
文章分类
最新评论
-
18335864773:
国产的软件PageOffice,本质上也是在客户端生成Exce ...
java 导出Excel 大数据量(一) -
zenmshuo:
从错误结果来看,应该是参数错误。我在用ActiveReport ...
jasper 子报表无法找到 -
longying2008:
是呀,恶心死人了,还天天发,天天上首页。
受不了那些打广告的了 -
endual:
前天晚上实在受不了,在它的某个广告下随口回了一句,跟他开始了无 ...
受不了那些打广告的了 -
西南吹风:
而且这人人品极其低劣。可称之为极品。他第一回发的时候,对他的作 ...
受不了那些打广告的了
群里的朋友无聊,于是出了题目大家一起做,原理很简单
用第三方jar包,commons-fileupload-1.2.2.jar,由于该jar依赖commons-io-2.0.1.jar,所以也加上这IO包
外加一个mysql数据库驱动jar,demo就用这3jar,
具体commons-fileupload-1.2.2.jar这个工具包怎么用,见apach官方网站 http://commons.apache.org/fileupload/using.html
上传处理主要是保存解析request及对解析后的对象进行流处理,所以,没有IO流操作基础的童鞋,可能存在一些困难。
在我这个demo中,流程是,
1、多个文件上传框,用户可以自由选择要上传的文件
2、点击上传后,在servlet中由fileupload去解析request,然后得到上传的文件封装对象FileItem和普通文本域(用UploadFile类封装了这两种类型的数据)
3、在servlet中进行其他操作,比如存数据、存硬盘、存硬盘并且讲文件在硬盘路径存数据库等。
4、上传成功跳转到下载页面。用户可对以往文件进行下载。
文件介绍:
1、UploadSvt 处理上传请求,处理上传数据等
2、UploadUtil上传工具类,主要是封装上传的文件对象和普通表单域对象
3、UploadFile由UploadUtil封装好的“上传的文件对象和普通表单域对象”存放到该类
4、DaoUtil处理数据库连接等系列数据
这里主要是贴几处重要的代码,
在实现流程2的时候,是在servlet中调用了一个UploadUtil工具类,用户解析request,并且封装成一个辅助实体对象UploadFile,然后在该servlet中进行其他的操作
UploadSvt 上传处理servlet:
/** * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse * response) */ @SuppressWarnings("unchecked") protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html;charset=UTF-8"); UploadFile uploadFile = null; UploadUtil upbase = new UploadUtil(); try { uploadFile = upbase.parseRequest(request); } catch (Exception e) { e.printStackTrace(); if (e.getMessage() != null) { response.getWriter().write(e.toString()); response.getWriter().write("<a href='download.jsp'>下载</a>"); response.getWriter().write("<a href='index.jsp'>上传</a>"); response.getWriter().flush(); response.getWriter().close(); } return; } doSomething1(uploadFile); // doSomething2(uploadFile); // doSomething3(uploadFile); response.sendRedirect("download.jsp"); }
doSomething1、doSomething2、doSomething3分别是三处理类,用于实现各种需求,如存数据库,存硬盘等等,
下面是FileUtil工具类中的解析方法,
public UploadFile parseRequest(HttpServletRequest request) throws Exception { request.setCharacterEncoding("UTF-8"); // 判断是否为上传 if (ServletFileUpload.isMultipartContent(request)) { // 初始一个DiskFileItemFactory DiskFileItemFactory factory = new DiskFileItemFactory(); // 设置临时存放目录 File file = new File(this.getClass().getResource( "/").getPath()); if(!file.exists() || !file.isDirectory()){ file.mkdirs(); } factory.setRepository(file); // 设置在案内存中的最大限度 factory.setSizeThreshold(UploadFile.SIZETHRESHOLD); ServletFileUpload upload = new ServletFileUpload(factory); // 设置最大上传文件大小 upload.setSizeMax(UploadFile.SIZEMAX); List<FileItem> items = null; try { // 格式化 items = upload.parseRequest(request); } catch (Exception e) { e.printStackTrace(); if (e instanceof SizeLimitExceededException) { throw new Exception("ERROR:上传文件过大,文件最大:"+UploadFile.SIZEMAX/1024+"KB"); }else{ throw new Exception("解析请求错误"+e.getMessage()); } } // 取得item的迭代对象 Iterator<FileItem> iter = items.iterator(); UploadFile uploadFile = new UploadFile(); Map<String, Object> fields = uploadFile.getFields(); List<FileItem> files = uploadFile.getFiles(); while (iter.hasNext()) { FileItem item = (FileItem) iter.next(); if (item.isFormField()) { String fieldName = new String(item.getFieldName().getBytes( "ISO-8859-1"), "UTF-8"); String fieldValue = new String(item.getString().getBytes( "ISO-8859-1"), "UTF-8"); if (fields.containsKey(fieldName)) { Object obj = fields.get(fieldName); if (obj instanceof List) { List<Object> ob = (List<Object>) obj; ob.add(fieldValue); } else { List<Object> list = new ArrayList<Object>(); list.add(obj); fields.remove(fieldName); fields.put(fieldName, list); } } else { fields.put(fieldName, fieldValue); } } else if (item.get() != null && item.get().length > 0) { files.add(item); } } request.setAttribute(UploadFile.REQATTRIBUTENAME, uploadFile); return uploadFile; } else { throw new Exception("ERROR:该请求不是上传文件 "); } }
还有一个UploadFile实现如下:用于封装解析request后的数据,
/** * fileuploadanddownload * UploadFile.java * @author lyjilu * date 2011-9-17 * @version 1.0 */ package com.lyjilu.model.entity; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import org.apache.commons.fileupload.FileItem; /** * @author lyjilu * date 2011-9-17 * @version 1.0 * 上传文件对象,用于处理request时,封装上传对象几普通表单域 */ public class UploadFile { /** * 默认临时存储目录 */ public static final String TEMPREPOSITORY = "temp/"; /** * 在内存中的最大限度 */ public static final int SIZETHRESHOLD = 10000000; /** * */ public UploadFile() { } /** * 最大上传文件大小 */ public static final int SIZEMAX = 5024000; /** * 变量,永远在request.setAttribute的时候的键,方便统一取值 */ public static final String REQATTRIBUTENAME = "__UploadFile"; /** * 上传文件集合 */ private List<FileItem> files = new ArrayList<FileItem>(); /** * 文本 域数据集合 */ private Map<String, Object> fields = new HashMap<String, Object>(); public Map<String, Object> getFields() { return fields; } public void setFields(Map<String, Object> fields) { this.fields = fields; } public List<FileItem> getFiles() { return files; } public void setFiles(List<FileItem> files) { this.files = files; } }
demo重要的类基本就这些,还有个下载页面 其它都是简单jsp页面,
- fileupdownload.zip (3 MB)
- 下载次数: 27
发表评论
-
BouncyCastleProvider加密的时候千万别乱new BouncyCastleProvider 切记
2015-07-21 14:47 14348BouncyCastleProvider加密的时候千万别乱n ... -
jasper 打印 报错 net.sf.jasperreports.engine.JRRuntimeException: Subreport overflow
2015-03-09 16:49 3551详情列表中需要增加子报表,但总是报错 net.sf.ja ... -
IBM AIX 服务器 PBE解密 报错 Given final block not properly padded
2014-12-15 17:54 2799在各个客户服务器上运行好好的PBE加解密程序突然在一个用AIX ... -
工作备忘
2014-11-13 13:51 0表单页面布局和展示页面布局用不同的样式表,以便维护的时候,可 ... -
被中止,呼叫 getNextException 以取得原因
2014-09-12 17:38 8735批量插入数据报错, 批次处理 0 insert into ... -
java util date转换成js日期
2014-07-20 17:24 2524问题是这样的,javabean中标准date是使用java ... -
java 导出Excel 大数据量(二)
2014-06-20 17:50 8842导出大量数据到 excel 的 xlsx文件 stat ... -
java操作oracle clob字段
2014-06-17 11:19 1073问题是这样,系统中要对oracle数据库的clob字段进行插 ... -
自己实现的连接池,和dbcp居然有差点一倍的效率差距,不开心。。
2014-02-18 21:41 829自己写的数据库连接池,个人感觉良好,这两天测试才发现,效率那 ... -
java获取浏览器类型及版本
2013-12-27 10:25 8063public Map<String,String> ... -
request.getContextPath()为空
2013-12-02 10:30 6220request.getContextPath()获取的结果 ... -
取得java对象地址
2013-05-25 11:49 1248前段时间想打印出对象地址,但是由于list重写 了toStr ... -
spring 中使用web容器连接池不关闭连接
2013-05-15 09:43 3510如果方法上加 了“@Transactional”就能正常关 ... -
设置html文件响应头
2013-05-06 11:17 2366原写法: response.addHeader( ... -
jasper 子报表无法找到
2013-03-08 20:11 2716网上有这样的说法 主要原因: 主报表找不到子报表的Jas ... -
java 图片缩放(2)
2013-02-18 17:35 1395之前写过一个图片缩 ... -
spring 报错:Probable fatal error:No fonts found.
2013-01-02 23:43 2478lyjilu.iteye.com centos 6.2 网 ... -
css @IMPORT 不起作用
2012-12-09 00:15 2487今天遇见个问题,就是css里面用@IMPORT 包含进来的页面 ... -
浏览器刷新与缓存
2012-12-08 16:28 1404用谷歌浏览器测试,在设置了Cache-Control=max- ... -
java 导出Excel 大数据量(一)
2012-11-25 19:03 29479分析导出实现代码,XLSX支持: /** ...
相关推荐
struts_fileupload文件上传Struts2
Servlet_fileupload是Java Servlet中处理文件上传的一种常见方式,它基于Apache的Commons FileUpload库。这个库提供了处理HTTP请求中的多部分数据(通常用于文件上传)的功能。在本篇文章中,我们将深入探讨如何利用...
[上传下载]仿163网盘无刷新文件上传 for .Net_fileupload.zip源码ASP.NET网站源码打包下载[上传下载]仿163网盘无刷新文件上传 for .Net_fileupload.zip源码ASP.NET网站源码打包下载[上传下载]仿163网盘无刷新文件...
【描述】"Web_JSP_FileUpload test code" 暗示这是一个关于JSP文件上传的测试代码实例。在实际的Web开发中,开发者通常会编写测试代码来验证文件上传功能是否正常工作,包括文件类型检查、大小限制、错误处理以及...
在Web开发中,文件上传功能是一项常见的需求,它允许用户将本地文件上传到服务器。在Java Web环境中,JSP(JavaServer Pages)与Servlet结合使用,能够实现这样的功能。本教程将详细介绍如何使用JSP和潇湘组件来实现...
"上传下载]仿163网盘无刷新文件上传 for Jsp_fileupload_jsp.rar" 这个标题表明这是一个关于文件上传功能的实现,模仿了163网盘的无刷新(即AJAX)上传方式,使用的编程语言是Java服务器页面(JSP),并涉及到文件...
文件上传组件_Apache_Commons_FileUpload_应用指南.doc
该压缩包文件“[上传下载]仿163网盘无刷新文件上传 for Jsp_fileupload_jsp.zip”是基于Java技术实现的一个毕业设计项目,旨在模仿163网盘的无刷新文件上传功能。在Java Web开发中,实现这样的功能涉及到多个关键...
本文档主要介绍了 Apache Commons FileUpload 组件的应用指南,旨在帮助开发者快速了解和使用该组件实现文件上传功能。 一、为什么需要文件上传组件? 几乎每一个 Web 应用中都需要为用户提供文件上传的功能,例如...
JSP源码可能会包含一个或多个JSP页面来展示已上传的文件列表,用户可以选择删除或下载文件。这些功能可能通过JSP的内置对象如`session`或`request`来实现,以保持用户状态和传递文件信息。 4. **错误处理和进度显示...
综上所述,"fileupload文件上传下载代码示例"是一个关于使用Java进行文件上传和下载的实践项目。通过学习和理解这些代码,开发者可以掌握在Web应用中处理文件上传和下载的核心技术,从而在实际工作中实现类似功能。
由于提供的文件列表只有一个:"[上传下载]仿163网盘无刷新文件上传 for .Net_fileupload",我们可以推测这个zip文件包含了一个完整的项目或者至少是关键的源代码文件,用于实现无刷新文件上传的功能。文件名中的...
【压缩包子文件的文件名称列表】"上传下载"仿163网盘无刷新文件上传 for Jsp_fileupload_jsp 暗示了压缩包内的主要代码文件可能是"Jsp_fileupload_jsp",这可能是包含JSP代码的文件,用于实现文件上传功能。...
[上传下载]仿163网盘无刷新文件上传 for Jsp_fileupload_jsp.zip项目JAVA源码+资料打包下载[上传下载]仿163网盘无刷新文件上传 for Jsp_fileupload_jsp.zip项目JAVA源码+资料打包下载 1.适合学生做毕业设计参考 2....