使用commons-fileupload完成资源向服务器的上传
2017-08-07 16:17
447 查看
注意:commons-fileupload依赖于commons-io。
提交表单
package cn.yellowimg.servlet; import java.io.File; import java.io.IOException; import java.util.List; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.commons.fileupload.FileItem; import org.apache.commons.fileupload.FileUploadBase.FileSizeLimitExceededException; import org.apache.commons.fileupload.FileUploadException; import org.apache.commons.fileupload.disk.DiskFileItemFactory; import org.apache.commons.fileupload.servlet.ServletFileUpload; import cn.yellowimg.Utils.CommonUtils; public class Upload2Servlet extends HttpServlet { public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.setCharacterEncoding("utf-8"); response.setContentType("text/html;charset=utf-8"); // 创建工厂对象 设置缓存大小与临时目录 20kB DiskFileItemFactory factory = new DiskFileItemFactory(20 * 1024, new File("D:/tmp")); //得到解析器 ServletFileUpload fileUpload = new ServletFileUpload(factory); /* * 限制单个文件的大小为100KB 必须在解析之前调用 也就parseRequest方法之前调用 * * 如果上传文件超出限制 则parseRequest抛出异常 */ // fileUpload.setFileSizeMax(100*1024); /* * 限制整个文件表单的大小 */ try { //解析器解析request List<FileItem> list = fileUpload.parseRequest(request); FileItem file1 = list.get(1); //要求保存到根目录下 // 得到根目录 String root = request.getServletContext().getRealPath( "/WEB-INF/files"); /* * 生成两级目录 * * 1 得到文件名称 * 2 得到hashcode * 3 转换成16进制 * 4 获取前两个字母 */ String filename = file1.getName(); /* * 处理文件名的绝对路径 */ int index = filename.lastIndexOf("\\"); if (index > 0) { filename = filename.substring(index + 1); } /* * 给文件名加上uuid 处理文件同名问题 */ filename = CommonUtils.uuid() + "_" + filename; /* * 1 得到HashCode */ int hashCode = filename.hashCode(); String hex = Integer.toHexString(hashCode); /* * * 获取hex前两个字母 与root链在一起 生成一个完整的路径 */ File dirFile = new File(root, "/" + hex.charAt(0) + "/" + hex.charAt(1)); /* * 创建目录链 * 若目录存在在不创建 不存在则创建 */ dirFile.mkdirs(); File destFile = new File(dirFile, filename); /* * 保存 */ try { file1.write(destFile); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } catch (FileUploadException e) { if (e instanceof FileSizeLimitExceededException) { request.setAttribute("msg", "文件大小超出限制100KB"); request.getRequestDispatcher("/form3.jsp").forward(request, response); } } } }
提交表单
<form action="<c:url value='/Upload2Servlet '/>" method="post" enctype="multipart/form-data"> 姓名:<input type="text" name="username"><br> 照片:<input type="file" name="picture"><br> <input type="submit" value="上传"> </form>
相关文章推荐
- 使用commons-fileupload上传文件到服务器
- 文件上传到tomcat服务器 commons-fileupload的详细介绍与使用
- 使用commons-fileupload和commoms-ioJar上传文件到服务器
- JAVA使用apache commons-fileupload组件完成文件上传到服务器功能
- 利用commons-fileupload组件上传文件至服务器和数据库
- 关于上传控件“FileUpload”的使用,将上传的图片的名称以服务器的时间命名。
- 使用commons-fileupload组件上传下载文件
- FileUpLoad单击按钮,完成上传文件到服务器
- 使用Commons-fileupload组件实现文件上传
- 使用Commons-fileupload 组件上传时,获取表单其它元素系列问题集锦
- 使用commons-fileupload组件上传下载文件
- 使用 Commons-fileupload 上传文件
- 使用Commons-fileupload组件实现文件上传的注意细节
- 使用Commons-fileupload组件实现文件上传
- 使用commons-fileupload实现单个和多个文件上传
- 使用commons-fileupload实现文件上传
- 利用commons-fileupload组件上传文件至服务器和数据库(ZT)
- 利用commons-fileupload组件上传文件至服务器和数据库- -
- 使用commons-fileupload组件上传下载文件
- 使用commons-fileupload实现上传