- 浏览: 254770 次
文章分类
最新评论
-
乛小小白:
有问题啊,下载下来的东西后面有一堆重复的
利用RandomAccessFile 实现多线程下载。 -
liyonghui160com:
能否给个例子 sqlserver的调不通啊
mybatis调用存储过程 -
abc382410124:
存储过程要占用数据库本身的计算资源,数据库本身增删改查已经够累 ...
mybatis调用存储过程 -
ccm1273936998:
[b][/b]
mybatis调用存储过程 -
nanjiwubing123:
<insert id="insert ...
mybatis批量更新的一些问题
一般常用的有三种上传组件是用的比较多的有三种。
参考:http://www.oschina.net/question/1_4442 三种文件的比较
自己整了个文件上传的工具类。整合文件类型检查,缓冲相关的设置,文件保存策略,和普通表单域封装。
贴下代码,有好意见和改进的欢迎评论。
用的是最常用的common-uploadfile
接口:
实现类
测试:
SpringMVC中action代码:
希望大家给下意见。
smartupload 性能不高
除非文件名中含有.,如 s.s.txt,就不行了。改下就可以了
参考:http://www.oschina.net/question/1_4442 三种文件的比较
自己整了个文件上传的工具类。整合文件类型检查,缓冲相关的设置,文件保存策略,和普通表单域封装。
贴下代码,有好意见和改进的欢迎评论。
用的是最常用的common-uploadfile
接口:
import java.io.File; import java.util.Map; import javax.servlet.http.HttpServletRequest; /** * 文件上传通用接口 * * fileType :限制的文件类型。 fileSize :限制的文件大小,默认5M,-1就是无限制大小 * * * crateFilePolicy : 文件创建策略,为true的话,根据url没有路径一直创建,默认启用 。 fileOverPolicy * :文件覆盖策略,为true的话,相同文件不会覆盖将会改名字,默认不启用。 * <p> * cachePathString :缓冲区文件夹 cacheSize缓冲区大小,默认5M。 * * * @author fule * @Time 2012 - 7 - 23 * */ public interface FileUploadModule { /** * 一兆的大小 */ long TRILLION = 1024 * 1024; /** * 文件限制性的大小(默认的5M) */ long DEFAULT_SIZE = TRILLION * 5; /** * 启用 */ boolean ENABLE = true; /** * 不启用 */ boolean DISABLE = false; /** * 设置文件上传的类型 * * @param type */ void setFileType(String[] type); /** * 设置缓存区磁盘位置,如果文件比较大,建议设置缓冲 * * @param cachePathString */ void setCachePathString(String cachePathString); /** * 设置缓存区大小,默认的为5M * * @param cacheSize */ void setCacheSize(long cacheSize); public void setFileSize(long fileSize); /** * 得到文件类型 * * @param file * @return */ public String getFileExt(File file); /** * 文件类型检查 当fileType为空将返回true 可通过setFileType()设置文件类型 * * @see FileUploadUtil 的 fileType属性 * @param file * 传入的文件 * @return 是否为指定类型(true) */ public boolean validateFileType(File file); /** * 递归的根据路径创建文件夹 * * @param url * @return * @throws Exception */ public boolean createFolder(String url) throws Exception; /** * 创建文件副本 * * @param file * @return */ public File createCopyFile(File file); /** * 文件上传 参数urlString是具体指定的目录 * * 如果该对象属性值为空 ,将不使用缓存,无文件类型限制,上传大小默认为5M,目录规则默认为没有目录递归创建,相同文件名将覆盖源文件 * 如需改变通过设置属性来改变 * * 此方法如文件上传错误或者文件类型不匹配将抛出异常 * * @param request * 当前请求 * @param urlString * urlString是具体指定的目录 * @throws Exception */ public void uploadFiles(HttpServletRequest request, String urlString) throws Exception; /** * 获得普通表单域的值 * @return */ public Map<String, String> getFormMap(); }
实现类
import java.io.File; import java.util.HashMap; import java.util.List; import java.util.Map; import javax.servlet.http.HttpServletRequest; import org.apache.commons.fileupload.FileItem; import org.apache.commons.fileupload.disk.DiskFileItemFactory; import org.apache.commons.fileupload.servlet.ServletFileUpload; /** * 文件上传工具类 * * @Time 2012 - 7 - 23 * @author fule * * fileType :限制的文件类型。 fileSize :限制的文件大小,默认5M,-1就是无限制大小 * * * crateFilePolicy : 文件创建策略,为true的话,根据url没有路径一直创建,默认启用 。 fileOverPolicy * :文件覆盖策略,为true的话,相同文件不会覆盖将会改名字,默认不启用。 * <p> * cachePathString :缓冲区文件夹 cacheSize缓冲区大小,默认5M。 * */ public class FileUploadUtil implements FileUploadModule { // 限制的文件类型 private String[] fileType; // 限制的文件大小,默认5M,-1就是无限制大小 private long fileSize = DEFAULT_SIZE; // 设置文件创建策略,为true的话,根据url没有路径一直创建,默认启用 private boolean crateFilePolicy = ENABLE; // 设置文件覆盖策略,为true的话,相同文件不会覆盖将会改名字,默认不启用 private boolean fileOverPolicy = DISABLE; // 设置缓冲区文件夹 private String cachePathString; // 设置缓冲区大小,默认5M private long cacheSize = DEFAULT_SIZE; // 文件上传处理类 private ServletFileUpload sfu; // 磁盘工厂 private DiskFileItemFactory factory = new DiskFileItemFactory(); // 表单域的值 private Map<String, String> formMap; public FileUploadUtil() { } public FileUploadUtil(String[] fileType, long fileSize, boolean crateFilePolicy, boolean fileOverPolicy, String cachePathString, long cacheSize) { super(); this.fileType = fileType; this.fileSize = fileSize; this.crateFilePolicy = crateFilePolicy; this.fileOverPolicy = fileOverPolicy; this.cachePathString = cachePathString; this.cacheSize = cacheSize; } public FileUploadUtil(String[] fileType, long fileSize, boolean crateFilePolicy, boolean fileOverPolicy) { super(); this.fileType = fileType; this.fileSize = fileSize; this.crateFilePolicy = crateFilePolicy; this.fileOverPolicy = fileOverPolicy; } public FileUploadUtil(String[] fileType, long fileSize) { super(); this.fileType = fileType; this.fileSize = fileSize; } public Map<String, String> getFormMap() { return formMap; } public void setFormMap(Map<String, String> formMap) { this.formMap = formMap; } public String getCachePathString() { return cachePathString; } public void setCachePathString(String cachePathString) { this.cachePathString = cachePathString; } public long getCacheSize() { return cacheSize; } public void setCacheSize(long cacheSize) { this.cacheSize = cacheSize; } public boolean isFileOverPolicy() { return fileOverPolicy; } public void setFileOverPolicy(boolean fileOverPolicy) { this.fileOverPolicy = fileOverPolicy; } public boolean isCrateFilePolicy() { return crateFilePolicy; } public void setCrateFilePolicy(boolean crateFilePolicy) { this.crateFilePolicy = crateFilePolicy; } public long getFileSize() { return fileSize; } public void setFileSize(long fileSize) { this.fileSize = fileSize; } public void setFileType(String[] fileType) { this.fileType = fileType; } public String[] getFileType() { return fileType; } public ServletFileUpload getServletFileUpload() { if (sfu == null) { return sfu = new ServletFileUpload(factory); } else { return sfu; } } /** * // 得到文件类型 * * @param file * @return */ public String getFileExt(File file) { return file.getName().substring(file.getName().lastIndexOf(".") + 1); } /** * 检查文件类型 * * @param fileType * 需要文件类型 * @param file * 传入的文件 * @return 是否为指定类型(true) */ public boolean validateFileType(File file) { if (fileType == null) { return true; } for (int i = 0, len = fileType.length; i < len; i++) { if (fileType[i].equals(getFileExt(file))) { return true; } } return false; } /** * 递归的根据路径创建文件夹 * * @param url * @return * @throws Exception */ public boolean createFolder(String url) throws Exception { boolean boo = true; // String path = url.substring(0, url.lastIndexOf("\\")); File file = new File(url); if (!file.exists()) { if (!file.mkdirs()) { boo = false; throw new Exception("文件夹创建失败"); } } return boo; } /** * 创建文件副本 * * @param file * @return */ public File createCopyFile(File file) { String name = file.getName().substring(0, file.getName().indexOf(".")); String basePath = file.getPath().substring(0, file.getPath().lastIndexOf("\\")+1); if (name.lastIndexOf("1") != -1) { String b = name.substring(0, name.lastIndexOf("1")); String bString = name.substring(name.lastIndexOf("1")); int a = Integer.valueOf(bString); name = b + String.valueOf((a + 1)); } else { name += "1"; } return new File(basePath+name+"."+ getFileExt(file)); } /** * 文件上传 参数urlString是具体指定的目录 如果该对象属性值为空 * 将不使用缓存,无文件类型限制,上传大小默认为5M,目录规则默认为没有目录递归创建 相同文件名将覆盖源文件 * 此方法如文件上传错误或者文件类型不匹配将抛出异常 * * @param request * 当前请求 * @param urlString * urlString是具体指定的目录 * @throws Exception */ @SuppressWarnings("unchecked") public void uploadFiles(HttpServletRequest request, String urlString) throws Exception { if (!ServletFileUpload.isMultipartContent(request)) return; if (crateFilePolicy) { createFolder(urlString); createFolder(getCachePathString()); } ServletFileUpload sfu = getServletFileUpload(); sfu.setFileSizeMax(fileSize); if (cachePathString != null) { factory.setRepository(new File(cachePathString)); factory.setSizeThreshold((int) cacheSize); } List<FileItem> items = sfu.parseRequest(request); Map<String, String> map = new HashMap<String, String>(); if (!fileOverPolicy) { for (FileItem ft : items) { if (!ft.isFormField()) { File file = new File(urlString, new File(ft.getName()).getName()); if (fileType != null) { if (validateFileType(file)) { ft.write(file); } else { throw new Exception("文件类型错误"); } } else { ft.write(file); } ft.delete(); } else { map.put(ft.getFieldName(), ft.getString("utf-8")); } } } else { for (FileItem ft : items) { if (!ft.isFormField()) { File file = new File(urlString, new File(ft.getName()).getName()); if (fileType != null) { if (validateFileType(file)) { ft.write(createCopyFile(file)); } else { throw new Exception("文件类型错误"); } } else { ft.write(createCopyFile(file)); } ft.delete(); } else { map.put(ft.getFieldName(), ft.getString("utf-8")); } } } setFormMap(map);//设置表单域的值 } }
测试:
SpringMVC中action代码:
/** * 测试工具类 * @param request */ @RequestMapping("testUtil.do") public void testFileUtil(HttpServletRequest request) { FileUploadModule fu = new FileUploadUtil(); fu.setCachePathString(request.getSession().getServletContext() .getRealPath(("/")) + "images/temp"); fu.setFileType(new String[]{"jpg","gif","txt"}); fu.setFileOverPolicy(FileUploadModule.ENABLE); try { fu.uploadFiles(request, request.getSession().getServletContext() .getRealPath(("/")+"images/test")); } catch (Exception e1) { // TODO Auto-generated catch block e1.printStackTrace(); } try { Map<String,String> mp = fu.getFormMap(); Set<String> key = mp.keySet(); //Object[] object =key.toArray(); for(String s:key){ System.out.println("表单名称:"+s); System.out.println("表单值:"+mp.get(s)); } } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } }
希望大家给下意见。
评论
5 楼
lohasle
2012-07-24
234369425 写道
Apache的smartupload
smartupload 性能不高
4 楼
234369425
2012-07-23
Apache的smartupload
3 楼
lohasle
2012-07-23
xutao5641745 写道
/**
* // 得到文件类型
*
* @param file
* @return
*/
public String getFileExt(File file) {
return file.getName().substring(file.getName().indexOf(".") + 1);
}
这种方式得到的文件类型,,,不一定真实吧?
* // 得到文件类型
*
* @param file
* @return
*/
public String getFileExt(File file) {
return file.getName().substring(file.getName().indexOf(".") + 1);
}
这种方式得到的文件类型,,,不一定真实吧?
除非文件名中含有.,如 s.s.txt,就不行了。改下就可以了
public String getFileExt(File file) { return file.getName().substring(file.getName().lastIndexOf(".") + 1); }
2 楼
xutao5641745
2012-07-23
/**
* // 得到文件类型
*
* @param file
* @return
*/
public String getFileExt(File file) {
return file.getName().substring(file.getName().indexOf(".") + 1);
}
这种方式得到的文件类型,,,不一定真实吧?
* // 得到文件类型
*
* @param file
* @return
*/
public String getFileExt(File file) {
return file.getName().substring(file.getName().indexOf(".") + 1);
}
这种方式得到的文件类型,,,不一定真实吧?
1 楼
denvelope
2012-07-23
用struts2框架就不用这么麻烦了。
发表评论
-
java取得格式化时间的最小刻度的整点时间
2013-05-02 16:10 10800public class Test{ /** ... -
java与Spring中的资源加载
2013-04-26 16:58 4282java Resource 资源加载: xml p ... -
圣诞即来,一颗打印的圣诞树给程屌。
2012-12-24 14:43 47import java.util.Scanner; ... -
利用RandomAccessFile 实现多线程下载。
2012-12-19 15:51 4336没事写个 多线程下载的 ... -
Spring定时器 demo
2012-10-23 10:58 1647XMl:配置 <!-- 以下是关于定时器的配置 -- ... -
使用junit测试SpringMVC
2012-08-03 09:54 56096架包支持:junit.jar;org.springframew ... -
java代码优化
2012-07-06 11:02 3701 集合,数组遍历 提前写好len 2 手动置无用对象指向 ... -
利用反射机制实现的sql语句自动生成、简化实体类封装
2012-04-23 08:58 11869现在所学的东西,有很多的共性。Dao层对于臃肿,很多都是ctr ... -
自动生成实体类
2012-04-19 12:33 5103javabean中需要建大量的实体类,几张表就有几张实体类,有 ...
相关推荐
另一个重要的库是"Commons-IO.jar",它是Apache Commons的另一个组件,提供了一系列与I/O操作相关的实用工具类。在文件上传过程中,它可以帮助我们进行文件的读写、复制、删除等操作。例如,`FileUtils`类提供了静态...
这些库包含了处理输入/输出(I/O)、文件上传(FileUpload)等常见任务的工具类和接口。下面将详细阐述`common-io`和`common-fileupload`这两个关键组件的主要功能和知识点。 1. **Apache Commons IO** (`common-io...
在Java开发中,上传文件是一项常见的任务,而`commons-fileupload-1.3.3.jar`和`commons-io-2.6.jar`是Apache Commons项目中的两个重要库,专门用于处理HTTP请求中的文件上传功能。这两个库为开发者提供了便捷、高效...
`common-fileupload`是Apache Commons项目的一部分,提供了一套完善的Java API,用于处理HTTP协议中的文件上传操作。这个库简化了从用户提交的表单中提取并处理文件数据的过程。 1. **文件上传流程** - 用户在Web...
`Commons IO`库是`Commons FileUpload`依赖的,因为它包含了处理I/O操作的工具类。 接下来,我们来看一下使用`Commons FileUpload`实现文件上传的基本步骤: 1. **创建Servlet或Controller**:在Java Web应用中,...
`commons-io-1.4.jar`是Apache Commons IO库的一个版本,它包含了大量与I/O操作相关的工具类。这个库是对Java标准库的扩展,提供了一些额外的功能和便利性。在与FileUpload配合使用时,IO库可以用来: 1. **文件...
**Apache Commons IO** 是另一个非常有用的库,它提供了一系列与输入/输出操作相关的工具类。2.0.1版本增加了对Java NIO的支持,并且修复了一些已知问题。这个库包括了文件操作(如读写、复制、比较、删除)、I/O...
Apache Commons IO是另一个非常实用的Java库,它提供了大量的I/O操作工具类,涵盖了文件操作、流操作、字符集转换等许多方面。"commons-io-2.4-bin"这个压缩包中包含的则是Commons IO库的二进制版本,以及可能的文档...
通过以上步骤,我们就使用Apache Commons FileUpload组件实现了一个基本的文件上传功能。你可以根据自己的需求对这个示例进行扩展,比如添加错误处理、文件类型检查和存储优化等。参考提供的博文链接,可以获取更多...
Apache Commons IO 是另一个库,虽然在这个场景中未直接使用,但它提供了许多与文件操作相关的实用工具类,如 `FileUtils`,可以方便地完成文件的复制、移动、删除等操作。 总的来说,Apache Commons FileUpload 和...
Apache Commons IO则是另一个实用的Java库,它包含了大量与输入/输出相关的工具类,如文件操作、流操作、读写操作等。在处理文件上传时,Commons IO库可以用来创建、移动、复制或删除文件,读取文件内容,以及进行...
"Common Fileupload上传组件包"是一个专用于处理Web应用程序中文件上传功能的工具包。这个包包含两个核心组件:`commons-io-1.4.jar`和`commons-fileupload-1.2.1.jar`。这两个组件在实现文件上传过程中扮演着至关...
- `commons-io-1.4.jar`是Apache Commons IO项目的一个版本,包含了许多I/O相关的实用工具类。这个库提供了解决Java I/O操作中常见问题的类和方法。 - **IOUtils**:这是Apache Commons IO中的核心类,提供了一...
总之,Common FileUpload是一个强大且灵活的Java文件上传组件,它为开发人员提供了处理文件上传的便捷工具,无论是在小型项目还是大型企业级应用中都能发挥重要作用。通过合理的配置和适当的错误处理,你可以构建...
- FTP 客户端:支持 FTP 协议,进行文件上传、下载、删除等操作。 - HTTP 客户端:简化了 HTTP 请求和响应的处理。 - Telnet 客户端:实现 Telnet 协议的客户端功能。 - SMTP 服务器:用于发送邮件。 ### 6. 其他...
Apache Commons IO库是另一个常用于Java开发的工具库,它提供了大量的实用工具类,处理各种I/O操作,如读写文件、复制流、处理流、检查文件类型等。在文件上传场景中,IO库可以辅助处理上传后的文件操作,如移动、...
这也是Apache Commons的一个组件,提供了大量的文件操作相关的工具类。这个库对于处理文件读写、文件复制、文件移动、文件属性检查等任务非常有用。例如,`FileUtils`类提供了静态方法,可以方便地完成文件的复制、...
这是Apache Commons项目的一个核心库,提供了大量的实用工具类,用于处理各种I/O操作,包括文件、流、字符集转换、读写操作、缓冲区、行处理等。1.4版本同样可能包含了若干bug修复和功能增强。 在文件上传和下载...
Apache Commons IO是Java的一个实用工具库,提供了大量与I/O相关的辅助类,包括文件读写、流操作、字符集转换等。而Apache Commons FileUpload则是专门处理HTTP请求中的多部分数据,即文件上传的组件。它简化了从...