SmartUpload
smartUpload 是 www.jspsmart.com 一套上传的组件包,可以轻松的实现文件的上传和下载。使用简单、可以轻松的实现上传文件类型的限制、也可以轻易的取得上传文件的名称、后缀、大小等。 它是一个系统提供 jar 包,可以直接导入 web 工程使用
如何使用
下面的用法是基于 eclipse 的 web 工程。
文件上传
-
导入 smartupload.jar 到
web-info/lib
目录下,并且 Build Path -
实例化
SmartUpload smartUpload = new SmartUpload()
-
初始化
String path = "file"; JspFactory jspFactory = JspFactory.getDefaultFactory(); PageContext pageContext = jspFactory.getPageContext(this,request,response,null,false,0,false); smartUpload.initialize(pageContext);
-
准备上传
// smartUpload 支持多个文件上传 smartUpload.upload();
-
保存文件
smartUpload.save(path);
文件下载
-
导入 smartupload.jar 到
web-info/lib
目录下,并且 Build Path -
实例化
SmartUpload smartUpload = new SmartUpload()
-
初始化
// 注意这里下载文件指定的路径不能用绝对路径 String path = "file/test.jpg"; smartUpload.initialize(this.getServletConfig(), request, response); smartUpload.setContentDisposition(null);
-
下载文件
smartUpload.downloadFile(path);
其他需要注意的用法
-
form 表单
对于 smartUpload,我们在 html 使用 form 表单时,不能简单的使用 get 方式提交,要进行封装。
- 指定 enctype 属性
- 控件的 name 属性要进行赋值,不能为空。
范例:
<!-- 用于文件上传的表单 --> <form action="/servlet/SmartuploadDemo01" method="post" enctype="multipart/form-data"> 选择文件:<input type="file" name="file"><!-- 文件选择框 --> <br> 文件描述:<input type="text" name="fileDec"> <br> <button>提交</button> </form>
-
获得参数
在对于 form 表单后,基于原本的用 HttpRequst 对象的 getParameter() 方法获取参数名就不管用来,这时候我们需要使用 smartUpload 提供的 Request 对象来获取参数值。
范例:
Request res = smartUpload.getRequest(); String fileDec = res.getParameter("fileDec");
这里可能遇到乱码问题,可以先获得字节数组,然后指定编码方式来解决乱码问题。
byte b[] = fileDec.getBytes(); fileDec = new String(b,"utf-8");
-
获取上传文件的 File 对象
可以通过 getFiles() 获取
org.lxh.smart.Files
对象,通过 Files 对象的File getFile(int index)
方法来获得org.lxh.smart.File
对象。范例:
File file = su.getFiles().getFile(0);
在获得 File 对象后,我们可以获取文件后缀 和文件名
getFileExt()
和getFileName()
-
另存为
当文件同名时,我们可以调用 File 对象的 saveAs() 方法来实现另存。
smartUpload.getFiles().getFile(0).saveAs(this.getServletContext().getRealPath("/file") + java.io.File.separator + newFileName);
FileUpload
FileUpload 是 Apache 组织提供的免费上传组件。可以从 Apache 网站下载。
相比 SmartUpload 开发。FileUpload 稍微复杂一些。而且 SmartUpload 以及多年没更新了,对比 FileUpload 在 Apache 的加持下,框架开发如 Structs2 和 SpringMVC 整合的都是 FileUpload。
如何使用
FileUpload 组件本身依赖 commons 组件,使用 FileUpload 开发,需要加载 commons 组件的 io 包,并且上传文件时候的表单控件是需要封装的,不能使用普通的表单。
步骤
需要导入 commons-fileupload-xxxx.jar
和 commons-io-xx.jar
两个 jar 包。
-
创建磁盘工程
DiskFileItemFactory diskFileItemFactory = new DiskFileItemFactory();
-
创建处理工具
ServletFileUpload servletFileUpload = new ServletFileUpload(diskFileItemFactory);
-
设置上传文件大小
servletFileUpload.setFileSizeMax(1024*1024*5);//上传文件最大为5M
-
接受表单的全部内容(不管表单的参数,还是上传的文件)
List<FileItem> fileItems = servletFileUpload.parseRequest(request);
-
判断是否为文件(使用
isFormField()
),如果是文件则保存,不是则为表单提交过的其他内容,例如参数。for (FileItem item : list) { // isFormField() 判断是否为表单字段,当是不是字段则是文件 if (!item.isFormField()) { String fileName = item.getName(); // 这里再获取原始文件名后重新命名了文件,另存到了其他文件夹。可以根据自己需求更改。 File file = new File(this.getServletContext().getRealPath("file")+File.separator+"11"+"."+fileName.split("\\.")[1]); item.write(file); } }
其中这里的 FileItem 还要很多方法,
getName()
使用了获取文件名getFieldName()
用来获取参数名getInputStream()
获取文件的输入流getSize()
获取文件大小- …