首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 其他教程 > 互联网 >

群活动(一)_fileupload 文件的下传上载

2012-08-31 
群活动(一)_fileupload 文件的上传下载群里的朋友无聊,于是出了题目大家一起做,原理很简单用第三方jar包,c

群活动(一)_fileupload 文件的上传下载

群里的朋友无聊,于是出了题目大家一起做,原理很简单

用第三方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)) {// 初始一个DiskFileItemFactoryDiskFileItemFactory 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重要的类基本就这些群活动(一)_fileupload 文件的下传上载,还有个下载页面?其它都是简单jsp页面,

热点排行