【零碎JAVA】表单文件上传
来源:互联网 发布:淘宝小号怎么注册 编辑:程序博客网 时间:2024/06/16 19:49
-创建jsp页面
创建一个包含上传文件表单的jsp页面:
<body> <h1>文件上传</h1> <form action="<c:url value='/UploadServlet' />" method="post" enctype="multipart/form-data"> 用户名:<input type="text" name="username" /><br/> 文 件:<input type="file" name="filename"><br/> <input type="submit" value="上传" /> </form></body>
需要注意的是form默认的编码格式为application/x-www-form-urlencoded,不能用于上传文件。在此,我们需要将他修改为multipart/form-data
-创建响应表单请求的UploadServlet
在获取文件的上传时,我们不能再通过简单的request.getAttribute()方法去获取表单内容了,因为他的请求体发生了改变,我们可以通过HttpWatch这样的工具去查看请求体。我们可以通过Apache提供的开源组件commons-fileupload.jar(他以来commons-io.jar)来简化我们获取表单信息的步骤。
在文件上传中需要注意一下几个问题:
1.文件必须保存到WEB-INF下!
2.文件名称相关问题,有些浏览器会提交文件绝对路径,我们需要切割。
3.目录打散,分散文件的分布,避免将所有文件放在一个目录下。
4.上传文件的大小限制。
5.缓存大小与临时目录。这个默认为10K,目录为“java.io.tmpdir”对应的目录,具体可以在DiskFileItemFactory中设置。
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { DiskFileItemFactory factory = new DiskFileItemFactory(); //获取工厂 ServletFileUpload sfu = new ServletFileUpload(factory); //获取解析器 sfu.setFileSizeMax(10 * 1024); //限制单个文件的大小不得超过10K sfu.setSizeMax(1024 * 1024); //限制请求的所有数据大小不得超过1M try { List<FileItem> listFileItem = sfu.parseRequest(request);//获取表单项列表 //文件保存目录,上传文件存放于WEB-INF目录下,使浏览器不可直接访问 String root = this.getServletContext().getRealPath("/WEB-INF/files/"); FileItem fileItem1 = listFileItem.get(0); System.out.println(fileItem1.getFieldName() + ":" + fileItem1.getString("utf-8")); FileItem fileItem2 = listFileItem.get(1); //System.out.println("Content-Type:" + fileItem2.getContentType()); //System.out.println("Size:" + fileItem2.getSize()); //System.out.println("FileName:" + fileItem2.getName()); String fileName = fileItem2.getName(); //当文件名称是绝对路径时,我们需要截取文件名部分 int index = fileName.lastIndexOf("\\"); if(index != -1){ fileName = fileName.substring(index + 1); } //文件名重名问题,uuid_fileName String uuid = UUID.randomUUID().toString().replace("-", "").toUpperCase(); System.out.println(uuid); String saveName = uuid + "_" + fileName; // 文件保存名字,避免同名文件的冲突 //目录打散-哈希打散,使用文件名哈希值的十六进制的前两位 int hashCode = fileName.hashCode(); String hex = Integer.toHexString(hashCode).toUpperCase(); File dirFile = new File(root, hex.charAt(0) + "/" + hex.charAt(1)); //创建目录链,自动生成该链中不存在的目录 dirFile.mkdirs(); File destFile = new File(dirFile, saveName); //写入文件 fileItem2.write(destFile); } catch (FileUploadException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } }
0 0
- 【零碎JAVA】表单文件上传
- 文件上传零碎
- java 模拟表单方式提交上传文件
- java客户端模拟表单上传文件
- java 模拟表单方式提交上传文件
- java客户端模拟表单上传文件
- java客户端模拟表单上传文件
- java文件流模拟form表单上传文件
- 表单里文件上传
- form表单上传文件
- form表单上传文件
- PHP 表单上传文件
- 表单上传文件
- 表单上传文件相关
- jsp表单文件上传
- Form表单文件上传
- jfinal表单文件上传
- 表单提交文件上传
- Linux系统瓶颈分析(经典)
- 黑马程序员---NSDictionary\NSMutableDictionary
- No package g++ available问题解决
- jquery源码的总体架构
- 【Cocos2d-x 3.2】拖尾渐隐效果MotionStreak
- 【零碎JAVA】表单文件上传
- Storyboard(三)性能
- 64位安卓* 和安卓运行库
- 浙大PAT目录
- Java内部类的使用小结
- ubantu安装配置配置samba
- Appium源码项目的目录结构分析
- 为什么需要在应用程序中增加渠道信息?
- UML类图几种关系的总结