- 浏览: 123782 次
- 性别:
- 来自: 地球
文章分类
最新评论
-
754731046:
很适合对初学者适用,谢谢
Oracle存储过程详解 -
天明破晓:
我测试了,不好用
Java中的正则表达式验证各种电话号码 -
OracleX:
otom31 写道从来不用标签库,几乎不用struts,除了最 ...
标签库的优点、缺点大辩论 -
otom31:
从来不用标签库,几乎不用struts,除了最早公司要使用以外; ...
标签库的优点、缺点大辩论
第一步:生成DiskFileItemFactory
DiskFileItemFactory factory = new DiskFileItemFactory();
/** * Constructs an unconfigured instance of this class. The resulting factory * may be configured by calling the appropriate setter methods. */ public DiskFileItemFactory() { this(DEFAULT_SIZE_THRESHOLD, null); }
|
/** * Constructs a preconfigured instance of this class. * * @param sizeThreshold The threshold, in bytes, below which items will be * retained in memory and above which they will be * stored as a file. * @param repository The data repository, which is the directory in * which files will be created, should the item size * exceed the threshold. */ public DiskFileItemFactory(int sizeThreshold, File repository) { this.sizeThreshold = sizeThreshold; this.repository = repository; } |
向diskFileItemFctory指定参数
// 设置最多只允许在内存中存储的数据,单位:字节
factory.setSizeThreshold(4096);
// 设置一旦文件大小超过getSizeThreshold()(默认10kb)的值时数据存放在硬盘的目录
factory.setRepository(new File("d:\\temp"));
/** * Sets the directory used to temporarily store files that are larger * than the configured size threshold. * * @param repository The directory in which temporary files will be located. * * @see #getRepository() * */ public void setRepository(File repository) { this.repository = repository; } |
第二步:生成ServletFileUpload
根据第一步得到的factory生成servletFileUpload对象
/** * Constructs an instance of this class which uses the supplied factory to * create <code>FileItem</code> instances. * * @see FileUpload#FileUpload() * @param fileItemFactory The factory to use for creating file items. */ public ServletFileUpload(FileItemFactory fileItemFactory) { super(fileItemFactory); } |
向servletFileUpload对象指定参数
// 设置允许用户上传文件大小,单位:字节,这里设为1m 值为-1没有大小限制 sevletFileUpload.setSizeMax(1 * 1024 * 1024); |
/** * Sets the maximum allowed size of a complete request, as opposed * to {@link #setFileSizeMax(long)}. * * @param sizeMax The maximum allowed size, in bytes. The default value of * -1 indicates, that there is no limit. * * @see #getSizeMax() * */ public void setSizeMax(long sizeMax) { this.sizeMax = sizeMax; } |
第三步:通过servletFileUpload读取request上传信息
List fileItems = sevletFileUpload.parseRequest(req);
/** * Processes an <a href="http://www.ietf.org/rfc/rfc1867.txt">RFC 1867</a> * compliant <code>multipart/form-data</code> stream. * * @param request The servlet request to be parsed. * * @return A list of <code>FileItem</code> instances parsed from the * request, in the order that they were transmitted. * * @throws FileUploadException if there are problems reading/parsing * the request or storing files. */ public List /* FileItem */ parseRequest(HttpServletRequest request) throws FileUploadException { return parseRequest(new ServletRequestContext(request)); } |
第四步:将读取的信息写入到指定目录
item.write(new File( D:/WorkSpace/BlogV1.4/WebContent/uploadImages/"+ m.group(1)));
/** * A convenience method to write an uploaded item to disk. The client code * is not concerned with whether or not the item is stored in memory, or on * disk in a temporary location. They just want to write the uploaded item * to a file. * <p> * This implementation first attempts to rename the uploaded item to the * specified destination file, if the item was originally written to disk. * Otherwise, the data will be copied to the specified file. * <p> * This method is only guaranteed to work <em>once</em>, the first time it * is invoked for a particular item. This is because, in the event that the * method renames a temporary file, that file will no longer be available * to copy or rename again at a later time. * * @param file The <code>File</code> into which the uploaded item should * be stored. * * @throws Exception if an error occurs. */ public void write(File file) throws Exception { if (isInMemory()) { FileOutputStream fout = null; try { fout = new FileOutputStream(file); fout.write(get()); } finally { if (fout != null) { fout.close(); } } } else { File outputFile = getStoreLocation(); if (outputFile != null) { // Save the length of the file size = outputFile.length(); /* * The uploaded file is being stored on disk * in a temporary location so move it to the * desired file. */ if (!outputFile.renameTo(file)) { BufferedInputStream in = null; BufferedOutputStream out = null; try { in = new BufferedInputStream( new FileInputStream(outputFile)); out = new BufferedOutputStream( new FileOutputStream(file)); IOUtils.copy(in, out); } finally { if (in != null) { try { in.close(); } catch (IOException e) { // ignore } } if (out != null) { try { out.close(); } catch (IOException e) { // ignore } } } } } else { /* * For whatever reason we cannot write the * file to disk. */ throw new FileUploadException( "Cannot write uploaded file to disk!"); } } }
|
附后台实现部分代码:
@Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { resp.setContentType("text/html; charset=GB2312"); PrintWriter out = resp.getWriter(); HttpSession session = req.getSession(); session.setMaxInactiveInterval(20); String submit = (String) session.getAttribute("submit"); String flag = req.getParameter("flag"); if (flag != null && flag.equals("ajax")) { if (submit != null) { out.print("重复提交"); } } else {
AlbumService as = new AlbumService(); // submit=null代表第一次提交,不为null代表重复提交 if (submit == null) { try { DiskFileItemFactory factory = new DiskFileItemFactory(); // 设置最多只允许在内存中存储的数据,单位:字节 factory.setSizeThreshold(4096); // 设置一旦文件大小超过getSizeThreshold()的值时数据存放在硬盘的目录 factory.setRepository(new File("d:\\temp")); ServletFileUpload sevletFileUpload = new ServletFileUpload( factory); // 设置允许用户上传文件大小,单位:字节,这里设为2m 值为-1没有大小限制 sevletFileUpload.setSizeMax(1 * 1024 * 1024); // 开始读取上传信息 List fileItems = sevletFileUpload.parseRequest(req); // 依次处理每个上传的文件 Iterator iter = fileItems.iterator(); // 正则匹配,过滤路径取文件名 String regExp = ".+\\\\(.+)$"; // 过滤掉的文件类型 String[] errorType = { ".exe", ".com", ".cgi", ".asp" }; Pattern p = Pattern.compile(regExp); while (iter.hasNext()) { FileItem item = (FileItem) iter.next(); // 忽略其他不是文件域的所有表单信息 if (!item.isFormField()) { String name = item.getName(); long size = item.getSize(); if ((name == null || name.equals("")) && size == 0) continue; Matcher m = p.matcher(name); boolean result = m.find(); if (result) { for (int temp = 0; temp < errorType.length; temp++) { if (m.group(1).endsWith(errorType[temp])) { throw new IOException(name + ": 非法文件类型禁止上传"); } } try { // 保存上传的文件到指定的目录 // 在下文中上传文件至数据库时,将对这里改写开始 item.write(new File( "D:/WorkSpace/BlogV1.4/WebContent/uploadImages/" + m.group(1))); as.uploadAlbum(m.group(1), req.getContextPath() + "/uploadImages/"); out.print(name + " " + size + "<br>"); // 在下文中上传文件至数据库时,将对这里改写结束 } catch (Exception e) { out.println(e); } } else { throw new IOException("fail to upload"); } } } } catch (IOException e) { out.println(e);
} catch (FileUploadException e) { out.println(e); } // 最后把session中的值置为false,表示对表单提交做过操作 session.setAttribute("submit", "submit"); List<AlbumBean> albumList = as.getAlbumList(); req.setAttribute("albumList", albumList); req.getRequestDispatcher("/albumList.jsp").forward(req, resp); } else { out.print("重复提交"); } }
} } |
发表评论
-
AOP的实现(JDK动态代理)
2011-11-29 16:21 1005转自:http://www.blogjava.net/D ... -
Java 枚举7常见种用法
2011-11-27 22:54 892转自:http://helloyesyes.itey ... -
标签库的优点、缺点大辩论
2011-11-27 20:57 1528转自:http://struts2.group.iteye.c ... -
一个Java程序员应该掌握的10项技能
2011-11-18 11:57 10191、语法:必须比 ... -
Java回调函数使用
2011-08-16 16:14 719正常情况下开发人员使用已经定义好的API,这个过程叫 ... -
为什么要设置Java环境变量(详解)
2011-08-17 21:40 683从大二开始接触Java,之后是断断续续的学习。大三真正开始 ... -
很长空格的String转换成Array数组
2011-08-23 14:40 1299开发中碰到了一个需求,需要把键值对字符串分隔,但键值之 ... -
不同格式的日期字符串转换
2011-08-23 14:44 956先把字符串日期转换成对应的格式,然后再转换成日期 p ... -
用序列化(Serializable)保存、读取对象
2011-08-23 15:33 872实现Serializable借口的对象可以被转换成一系列 ... -
JUint测试
2011-08-23 15:36 661ClassA.java public class Cla ... -
解决Join方法的疑惑
2011-08-23 20:57 1013很长时间对join方法感到疑惑,不明白到底是谁要阻塞,谁要继 ... -
线程学习笔记【1】----进程、线程概念及创建线程
2011-08-27 22:33 8071.进程与线程 每个进程都独享一块内存空间,一个应用程 ... -
线程学习笔记【2】---Timer(定时器)
2011-08-28 09:15 784入门 public class Time01 { ... -
线程学习笔记【3】---互斥技术
2011-08-29 15:10 755第一个示例更多的是运用了内部类的特性: 内部类重要特点:可以 ... -
线程学习笔记【4】---线程之间通信
2011-08-29 17:31 752子线程先循环10次,然后主线程循环100次,再子线程循环10次 ... -
线程学习笔记【5】--ThreadLocal应用
2011-09-05 15:31 804基本的ThreadLocal使用 public clas ... -
各种创建单例模式的优缺点
2011-09-05 21:54 831单例模式应用于一个类只有一个实例的情况,并且为其实例提供一个全 ... -
Struts1入门实例(简单登录)
2011-09-19 23:00 903现在开始加入公司的核心项目,但由于项目开发比较早,所以使用的技 ... -
各种文件注释写法
2011-09-30 15:52 1266JSP注释 在JSP中注释最好用< ... -
敲回车光标跳到下一个输入框(只能在IE中使用)
2011-10-08 10:22 1760<html> <head> & ...
相关推荐
commons-fileupload-1.2.2commons-fileupload-1.2.2commons-fileupload-1.2.2commons-fileupload-1.2.2commons-fileupload-1.2.2commons-fileupload-1.2.2commons-fileupload-1.2.2commons-fileupload-1.2.2commons-...
在实际开发中,Apache Commons FileUpload和Commons IO结合使用,可以高效、安全地处理文件上传。它们是Java Web开发者处理文件上传问题的得力工具。同时,配合帮助文档,开发者可以更深入理解这两个库的功能和使用...
- `commons-fileupload-1.2.2.jar`: 主库文件,包含了所有实现文件上传功能的类和方法。 - `LICENSE`: 该库的许可文件,详细说明了使用和分发的条款。 - `NOTICE`: 关于库中使用到的其他开源组件的信息和版权声明。 ...
本篇将讨论如何使用Apache Commons FileUpload 1.2.2库和jQuery的progressbar插件来实现这样的功能。 Apache Commons FileUpload是一个Java库,专门处理HTTP请求中的多部分形式数据,即通常用于上传文件的数据格式...
源代码包`commons-fileupload-1.2.2-src.zip`包含了库的所有源代码,你可以深入学习其实现细节,了解如何解析多部分请求,如何管理内存和磁盘资源,以及如何处理文件上传过程中的异常。 **六、文档解读** `common_...
commons-fileupload-1.2.1.jar commons-discovery-0.2.jar commons-digester-1.6.jar commons-dbcp-1.2.2.jar commons-collections-3.2.1.jar commons-codec-1.3.jar commons-chain-1.1.jar commons-beanutils-1.6....
免责声明:资料部分来源于合法的互联网渠道收集和整理,部分自己学习积累成果,供大家学习参考与交流。收取的费用仅用于收集和整理资料耗费时间的酬劳。 本人尊重原创作者或出版方,资料版权归原作者或出版方所有,...
javaweb开发jar包打包下载 jar包+源码 1、c3p0-0.9.1.2 2、commons-beanutils-1.8.3-bin 3、commons-dbcp-1.4-bin 4、commons-fileupload-1.2.2-bin 5、commons-dbcp-1.4-bin
主要用到两个jar:commons-fileupload-1.2.2.jar和commons-io-2.0.1.jar 内容介绍: com.fm.FileManagerService:一个servlet用来实现主要的文件上传下载逻辑的 com.fm.MyPreogressListener:一个进度监听类,用来做...
commons-fileupload-1.2.2.jar commons-io-2.0.1.jar commons-logging-1.1.3.jar dom4j-1.6.1.jar hibernate-commons-annotations-4.0.5.Final.jar hibernate-core-4.3.11.Final.jar hibernate-entitymanager-4.3.11...
1. **依赖库**:确保项目包含文件上传所需的库,如`commons-fileupload-1.2.2.jar`。 2. **Uploader类**:在Java源码中创建`Uploader`类,处理图片上传逻辑。 3. **配置`editor_config.js`**:设置`imageUrl`指向...
在给定的描述中提到了`commons-fileupload-1.2.2`,这是一个非常实用的开源组件,用于处理HTTP协议中的文件上传。同时,还提到了`commons-io-1.4.jar`,这是Apache Commons IO库的一个版本,它提供了一系列与I/O相关...
8. `commons-fileupload-1.2.2.jar` 支持处理HTTP请求中的文件上传。 集成SSH框架时,通常会涉及以下步骤: 1. 配置Spring的bean定义,包括DataSource、SessionFactory、HibernateTemplate或JpaTemplate,以及...
<commons-fileupload.version>1.3.1</commons-fileupload.version> <jedis.version>2.7.2 <solrj.version>4.10.3 <!-- 时间操作组件 --> <groupId>joda-time <artifactId>joda-time ${joda-time...