Apache的上传组件其它已经被封装到Struts那中去了,我在网上找到了一些文章介绍它是如何上传文件的,自己跟了一下源码也写了一个上传的实例,仅供参考!
一、JSP页面如下:
<form method="POST" action="UploadServlet" ENCTYPE="multipart/form-data"> <table> <tr><td><input type="text" name="subject" /></td></tr> <tr><td><input type="text" name="subject" /></td></tr> <tr><td><input type="file" name="file1" /></td></tr> <tr><td><input type="file" name="file2" /></td></tr> <tr><td><input type="file" name="file3" /></td></tr> <tr><td><input type="submit" value="上传"/></td></tr> </table> </form> <br /> <a href="DownLoadServlet">下载</a>
二、上传的Servlet如下:
/** * Apache组件上传 * * @author mingxue.zhang@163.com * @date 2010-10-30 */ public class UploadServlet extends HttpServlet { private static final long serialVersionUID = 5827821285414610443L; public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { this.doPost(request, response); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 上传文件目录 String uploadDir = this.getServletContext().getRealPath("/uploadDir"); DiskFileItemFactory factory = new DiskFileItemFactory(); // 设置内存区块大小4KB factory.setSizeThreshold(4 * 1024); // 设置暂存容器,当上传文件大于设置的内存块大小时,用暂存容器做中转 factory.setRepository(new File(this.getServletContext().getRealPath( "/temp"))); ServletFileUpload fileUpload = new ServletFileUpload(factory); fileUpload.setSizeMax(1024 * 1024 * 100); fileUpload.setFileSizeMax(1024 * 1024 * 10); List<FileItem> fileItemList = null; try { fileItemList = fileUpload.parseRequest(request); } catch (FileUploadException e) { e.printStackTrace(); } Iterator<FileItem> fileItemIterator = fileItemList.iterator(); FileItem fileItem = null; while (fileItemIterator.hasNext()) { fileItem = fileItemIterator.next(); // 普通文件框上传 if (fileItem.isFormField()) { String filedName = fileItem.getFieldName(); String filedValue = fileItem.getString("GBK");// 编码格式 System.out.println(filedName);// 文件框名称 System.out.println(filedValue);// 文件的值 } else { String filedName = fileItem.getFieldName();// 文件上传框的名称 // 获取文件上传的文件名 String OriginalFileName = takeOutFileName(fileItem.getName()); System.out.println("原始文件名:"+OriginalFileName); if (!"".equals(OriginalFileName)) { // 根据上传的文件名重新命名 String newFileName = getNewFileName(OriginalFileName); System.out.println("重新名:"+newFileName); File writeToFile = new File(uploadDir + File.separator + newFileName); try { fileItem.write(writeToFile); } catch (Exception e) { e.printStackTrace(); } } } } } private String takeOutFileName(String filePath) { String fileName = filePath; if (null != filePath && !"".equals(filePath)) { int port = filePath.lastIndexOf("\\"); if(port != -1){ fileName = filePath.substring(port+1); } } return fileName; } private String getNewFileName(String originalFileName) { StringBuffer newFileName = new StringBuffer(); if (null != originalFileName && !"".equals(originalFileName)) { int port = originalFileName.lastIndexOf("."); String type = ""; String fileName = ""; if (port != -1) { type = originalFileName.substring(port + 1); fileName = originalFileName.substring(0, port); } else { fileName = originalFileName; } StringBuffer suffix = new StringBuffer("_"); suffix.append(Calendar.getInstance().getTimeInMillis()); suffix.append("_"); suffix.append(new Random().nextInt(100)); newFileName.append(fileName); newFileName.append(suffix); newFileName.append("."); newFileName.append(type); } return newFileName.toString(); } }
三、下载的Servlet如下:
/** * Apache组件下载 * * @author mingxue.zhang@163.com * @date 2010-10-30 */ public class DownLoadServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { this.doPost(request, response); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String filePath = "D:\\Tomcat\\apache-tomcat-6.0.26\\webapps\\ApacheUpload\\uploadDir\\"; String fileName = "2010年10月安排2_1288447490125_56.txt"; String Originalname = "2010年10月安排2.txt"; response.setContentType("application/octet-stream"); String isoFileName = new String(Originalname.getBytes("GB2312"), "ISO8859-1"); response.setHeader("Content-Disposition", "attachment; filename=" + isoFileName); ServletOutputStream out = response.getOutputStream(); BufferedOutputStream bufferOut = new BufferedOutputStream(out); FileInputStream inputStream = new FileInputStream(new File(filePath, fileName)); BufferedInputStream bufferInput = new BufferedInputStream(inputStream); byte[] buffer = new byte[5 * 1024]; int length = 0; while ((length = bufferInput.read(buffer)) != -1) { bufferOut.write(buffer, 0, length); } bufferInput.close(); inputStream.close(); bufferOut.close(); out.close(); } }
Servlet配置如下:
<servlet> <servlet-name>UploadServlet</servlet-name> <servlet-class>com.mengya.servlet.UploadServlet</servlet-class> </servlet> <servlet> <servlet-name>DownLoadServlet</servlet-name> <servlet-class>com.mengya.servlet.DownLoadServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>UploadServlet</servlet-name> <url-pattern>/UploadServlet</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>DownLoadServlet</servlet-name> <url-pattern>/DownLoadServlet</url-pattern> </servlet-mapping>
相关推荐
通过阅读这篇博客,开发者可以更好地理解如何在Java Web应用中使用`commons-fileupload`组件实现安全、高效的文件上传功能。 总结起来,`commons-fileupload`组件是处理HTTP文件上传的利器,它简化了文件上传的流程...
总的来说,Apache Commons FileUpload 1.3.3是Java Web开发中处理文件上传不可或缺的工具,结合Apache Commons IO,可以构建出高效、安全的文件上传功能。这两个库都是Java生态系统的重要组成部分,大大提高了开发...
3. **解析请求**:使用Commons FileUpload库解析请求,获取上传的文件项。 4. **保存文件**:从文件项中获取输入流,然后写入到服务器的某个目录,完成文件上传。 四、文件下载步骤 1. **处理请求**:Servlet接收到...
总的来说,`commons-fileupload-1.3.3.jar` 和 `commons-io-2.5.jar` 这两个库为Java开发者提供了强大而便捷的文件上传解决方案,它们简化了原本复杂的过程,使开发者可以更专注于业务逻辑,而不是底层的文件处理...
这两个组件是Java Web开发中的重要工具,特别是对于初学者来说,它们简化了文件上传的复杂过程。 **Commons-Fileupload组件** Commons-Fileupload是Apache Commons项目的一个子项目,专门设计用于处理Servlet容器...
综上所述,这些组件的结合使用,可以构建一个健壮的、能够处理文件上传以及与数据库交互的Java Web应用,是Java开发中常见的技术栈配置。开发者在实际项目中,可以通过这些工具来提升应用的稳定性和效率。
Apache Commons FileUpload和Commons IO两个库是Java中处理文件上传的关键组件,它们为SpringMVC和MyBatis这样的框架提供了强大的支持。本篇文章将深入探讨这两个库以及它们在图片处理中的作用。 首先,`commons-...
Commons FileUpload和Commons IO是Java开发中两个非常重要的库,尤其在处理文件上传功能时。这两个库由Apache软件基金会维护,是许多Java Web应用程序的标准组成部分。 `commons-fileupload-1.3.2.jar`是Apache ...
总结起来,Apache Commons FileUpload是一个强大的、高度可配置的文件上传组件,它简化了Java Web应用中处理文件上传的复杂性。通过结合使用`commons-fileupload-1.3.1.jar`和`commons-fileupload-1.3.1-sources.jar...
本主题将深入探讨两种常见的Java上传组件——SmartUpload和Commons-Fileupload。 SmartUpload是一个强大的Java上传组件,由Julien DROUET开发,它为JSP和Servlet提供了方便的文件上传功能。SmartUpload提供了一套...
总之,Apache Commons FileUpload是Java Web开发中处理文件上传不可或缺的工具,它提供了高效、灵活且安全的文件上传解决方案。通过理解和熟练运用这个库,开发者可以轻松地在自己的应用中实现复杂的文件上传功能。
"commons-fileupload-1.3.1.jar" 是Apache Commons FileUpload项目的版本1.3.1的Java档案文件,这个库专门设计用于处理HTTP协议中的文件上传功能。在Web开发中,尤其是基于Java的服务器端应用程序,文件上传是常见的...
Apache Commons FileUpload库是Java Web开发中不可或缺的一部分,它简化了文件上传操作,使得开发者能够更专注于业务逻辑,而非底层细节。通过理解其工作原理和正确使用方式,可以更好地应对实际项目中的文件上传...
第1个上传组件commons-fileupload =============commons-fileupload ================ common-fileupload组件是apache的一个开源项目之一,可以从http://jakarta.apache.org/commons/fileupload/下载。该组件简单...
本资源为处理表单文件上传的一个开源组件( Commons-fileupload ),该...注意:使用Commons-fileupload组件实现文件上传,需要导入该组件相应的支撑jar包:Commons-fileupload和commons-io;该jar包压缩包中已包含。
### 使用commons-fileupload-1.0进行文件上传的实例及乱码处理 #### 一、commons-fileupload简介 `commons-fileupload`是Apache Commons项目下的一个子项目,它提供了强大的文件上传功能,允许用户轻松地将文件从...
总结,Apache Commons FileUpload是Java Web开发中不可或缺的工具,它简化了文件上传的处理过程,提供了灵活的配置选项和强大的功能。理解并熟练运用这个组件,可以有效地提升开发效率,同时保证上传功能的安全和...
Apache Commons FileUpload是Java的一个组件,专门用于处理HTTP请求中的多部分数据,即文件上传。在Struts2中,这个库允许用户在表单中上传文件到服务器。1.2.1版本是在2009年发布的,提供了稳定且功能丰富的文件...