快速业务通道

Struts2文件上传(一) Common-FileUpload - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-24

Struts2文件上传(一) Common-FileUpload

时间:2010-01-06 javaeye zhanghong

文件上传是许多项目都遇到的需求,Struts2中也带有文件上传功能,但它是利用的java领域的其他 俩个常用的文件上传的项目:Common- FileUpload和COS,在了解Struts2之前让我们了解下怎样使用 Common-FileUpload来实现文件上传以及文件上传实现过程中应该注意的问题。

在Common- FileUpload中,它把从客户端提交过来的表单封装成一个个FileItem对象,这也是它实现文件上传功能 的核心类。另一个很重要的类就是FileUploadBase,他的功能就是解析请求(request),如进行上传文 件大小验证,请求类型验证(文件上传的enctype要设置成multipart/form-data)等。我们经常用到它 的子类ServletFileUpload。在FileUploadBase解析 request的过程中会将文件保存到内存,如果文件大 小大于我们设置的缓存的大小,它将把文件的其他内容保存到一个临时目录,当我们对FileItem 对象实 现正真上传时会从内存区或临时目录将文件保存到正真的上传目录。而我们要做的就是进行简单的配置 ,可以用很少的代码就可以实现文件上传,而不用直接与IO流打交道。首先将文件上传过程中应注意的 地方了解下:

1.request请求的方法一定要是POST:method="post"

2.request请求的类型 一定要是multipart/form-data: enctype="multipart/form-data"

3.在对DiskFileItemFacotry 设置过程中repository参数代表文件保存的临时目录,如果不设置,系统将以System.getProperty ("java.io.tmpdir")代表的目录作为临时目录。

4.DiskFileItemFacotry中的sizeThreshold参数 代表保存到内存的大小,如果当个上传文件的大小小于这个值,则这个文件会暂时保存到内存中。如果 大于这个值,则多的部分会保存到临时目录中。单位为B。

5.ServletFileUpload中的sizeMax参 数是代表上传文件的总大小,单位为B

6.要对FileItem进行上传操作,首先要判断isFormField() 为false,因为系统将每个表单项解析成一个FileItem,这其中也包括不是文件上传的表单项。所以要判 断是否为文件上传表单项。

下面用Servlet简单的实现文件上传:

upload.jsp

Java代码

<body> <form method="post"  id="uploadForm" action="UploadServlet" enctype="multipart/form-data" > <table  style="border: 1px solid;" align="center"> <thead> <tr> <td style="text-align: center" colspan="2">文件上传</td> </tr> </thead> <tbody> <tr> <td>用户 名:</td> <td><input type="text"  name="user.username"></input></td> </tr> <tr> <td>密码:</td> <td><input type="text"  name="user.password"></input></td> </tr> <tr> <td colspan="2"> <input type="file" name="file1"/> </td> </tr> <tr> <td colspan="2"> <input  type="file" name="file2"/> </td> </tr> <tr> <td colspan="2"> <input type="file" name="file3"/> </td> </tr> <tr> <td><input type="button"  value="Login" id="upload"/></td> <td><input type="button"  value="Cancel" id="cancelUpload"/></td> </tr> </tbody> </table> </form> </body>

UploadServlet

Java代码

protected void  doPost(HttpServletRequest request, HttpServletResponse response) throws  ServletException, IOException { try { DiskFileItemFactory factory = new  DiskFileItemFactory(); // 设置临时缓存大小,文件大于这个值的部分保存到临时目录 factory.setSizeThreshold(1024 * 128); //设置文件保存临时目录 factory.setRepository(new File( "C:\\Documents and Settings\\bond\\temp")); ServletFileUpload upload = new ServletFileUpload(factory); // 设置上传内容大小 upload.setSizeMax(1024 * 1024*512); List fileItems =  upload.parseRequest(request); for (FileItem fi : fileItems) { if (! fi.isFormField()) { fi .write(new File("D:\\bond\\upload", fi .getName ())); } } request.getRequestDispatcher("success.jsp").forward(request, response); } catch (Exception e) { e.printStackTrace(); request.getRequestDispatcher("failure.jsp").forward(request, response); }

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号