- 浏览: 216486 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
foreach4:
haohao-xuexi02 写道xiang37 写道原来这么 ...
在路上 -
haohao-xuexi02:
xiang37 写道原来这么难!生活是自己的,人生很多时候,需 ...
在路上 -
xiang37:
原来这么难!生活是自己的,人生很多时候,需要拿得起,放得下。
在路上 -
xiang37:
坚强,原来那么难!
关于嘟嘟,引起的 -
heymaomao:
vi $PATH_resin/bin/httpd.sh arg ...
resin 的 java.lang.OutOfMemoryError: PermGen space 解决办法
使用FileUpload组件上传文件
文件上传在web应用中非常普遍,要在jsp环境中实现文件上传功能是非常容易的,因为网上有许多用java开发的文件上传组件,本文以commons-fileupload组件为例,为jsp应用添加文件上传功能。
common-fileupload组件是apache的一个开源项目之一,可以从http://jakarta.apache.org/commons/fileupload/下载。用该组件可实现一次上传一个或多个文件,并可限制文件大小。
下载后解压zip包,将commons-fileupload-1.0.jar复制到tomcat的webapps\你的webapp\WEB-INF\lib\下,目录不存在请自建目录。
新建一个servlet: Upload.java用于文件上传:
- public class Upload extends HttpServlet {
- private String uploadPath = "C:\\upload\\"; // 上传文件的目录
- private String tempPath = "C:\\upload\\tmp\\"; // 临时文件目录
- public void doPost(HttpServletRequest request,
- HttpServletResponse response)
- throws IOException, ServletException
- {
- }
- }
- 在doPost()方法中,当servlet收到浏览器发出的Post请求后,实现文件上传。以下是示例代码:
- public void doPost(HttpServletRequest request,
- HttpServletResponse response)
- throws IOException, ServletException
- {
- try {
- DiskFileUpload fu = new DiskFileUpload();
- // 设置最大文件尺寸,这里是4MB
- fu.setSizeMax(4194304);
- // 设置缓冲区大小,这里是4kb
- fu.setSizeThreshold(4096);
- // 设置临时目录:
- fu.setRepositoryPath(tempPath);
- // 得到所有的文件:
- List fileItems = fu.parseRequest(request);
- Iterator i = fileItems.iterator();
- // 依次处理每一个文件:
- while(i.hasNext()) {
- FileItem fi = (FileItem)i.next();
- // 获得文件名,这个文件名包括路径:
- String fileName = fi.getName();
- // 在这里可以记录用户和文件信息
- // ...
- // 写入文件,暂定文件名为a.txt,可以从fileName中提取文件名:
- fi.write(new File(uploadPath + "a.txt"));
- }
- }
- catch(Exception e) {
- // 可以跳转出错页面
- }
- }
- 如果要在配置文件中读取指定的上传文件夹,可以在init()方法中执行:
- public void init() throws ServletException {
- uploadPath = ....
- tempPath = ....
- // 文件夹不存在就自动创建:
- if(!new File(uploadPath).isDirectory())
- new File(uploadPath).mkdirs();
- if(!new File(tempPath).isDirectory())
- new File(tempPath).mkdirs();
- }
public class Upload extends HttpServlet { private String uploadPath = "C:\\upload\\"; // 上传文件的目录 private String tempPath = "C:\\upload\\tmp\\"; // 临时文件目录 public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { } } 在doPost()方法中,当servlet收到浏览器发出的Post请求后,实现文件上传。以下是示例代码: public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { try { DiskFileUpload fu = new DiskFileUpload(); // 设置最大文件尺寸,这里是4MB fu.setSizeMax(4194304); // 设置缓冲区大小,这里是4kb fu.setSizeThreshold(4096); // 设置临时目录: fu.setRepositoryPath(tempPath); // 得到所有的文件: List fileItems = fu.parseRequest(request); Iterator i = fileItems.iterator(); // 依次处理每一个文件: while(i.hasNext()) { FileItem fi = (FileItem)i.next(); // 获得文件名,这个文件名包括路径: String fileName = fi.getName(); // 在这里可以记录用户和文件信息 // ... // 写入文件,暂定文件名为a.txt,可以从fileName中提取文件名: fi.write(new File(uploadPath + "a.txt")); } } catch(Exception e) { // 可以跳转出错页面 } } 如果要在配置文件中读取指定的上传文件夹,可以在init()方法中执行: public void init() throws ServletException { uploadPath = .... tempPath = .... // 文件夹不存在就自动创建: if(!new File(uploadPath).isDirectory()) new File(uploadPath).mkdirs(); if(!new File(tempPath).isDirectory()) new File(tempPath).mkdirs(); }
编译该servlet,注意要指定classpath,确保包含commons-upload-1.0.jar和tomcat\common\lib\servlet-api.jar。
配置servlet,用记事本打开tomcat\webapps\你的webapp\WEB-INF\web.xml,没有的话新建一个。
典型配置如下:
- <?xml version="1.0" encoding="ISO-8859-1"?>
- <!DOCTYPE web-app
- PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
- "http://java.sun.com/dtd/web-app_2_3.dtd">
- <web-app>
- <servlet>
- <servlet-name>Upload</servlet-name>
- <servlet-class>Upload</servlet-class>
- </servlet>
- <servlet-mapping>
- <servlet-name>Upload</servlet-name>
- <url-pattern>/fileupload</url-pattern>
- </servlet-mapping>
- </web-app>
<?xml version="1.0" encoding="ISO-8859-1"?> <!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd"> <web-app> <servlet> <servlet-name>Upload</servlet-name> <servlet-class>Upload</servlet-class> </servlet> <servlet-mapping> <servlet-name>Upload</servlet-name> <url-pattern>/fileupload</url-pattern> </servlet-mapping> </web-app>
配置好servlet后,启动tomcat,写一个简单的html测试:
- <form action="fileupload" method="post"
- enctype="multipart/form-data" name="form1">
- <input type="file" name="file">
- <input type="submit" name="Submit" value="upload">
- </form>
<form action="fileupload" method="post" enctype="multipart/form-data" name="form1"> <input type="file" name="file"> <input type="submit" name="Submit" value="upload"> </form>
注意action="fileupload"其中fileupload是配置servlet时指定的url-pattern。
二:
选择上传文件页面:selfile.jsp,如此访问此页面:
- <html:link module="/upload" page="/upload.do"> 继续上传</html:link></h2>
- --------------------------------------------------------------------------------
- <%@ page contentType="text/html; charset=GBK" %>
- <%@ page import="org.apache.struts.action.*,
- java.util.Iterator,
- org.apache.struts.Globals" %>
- <%@ taglib uri="/tags/struts-bean" prefix="bean" %>
- <%@ taglib uri="/tags/struts-html" prefix="html" %>
- <%@ taglib uri="/tags/struts-logic" prefix="logic" %>
- <logic:messagesPresent>
- <ul>
- <html:messages id="error">
- <li><bean:write name="error"/></li>
- </html:messages>
- </ul><hr />
- </logic:messagesPresent>
- <html:html>
- <html:form action="uploadsAction.do" enctype="multipart/form-data">
- <html:file property="theFile"/>
- <html:submit/>
- </html:form>
- </html:html>
<html:link module="/upload" page="/upload.do"> 继续上传</html:link></h2> -------------------------------------------------------------------------------- <%@ page contentType="text/html; charset=GBK" %> <%@ page import="org.apache.struts.action.*, java.util.Iterator, org.apache.struts.Globals" %> <%@ taglib uri="/tags/struts-bean" prefix="bean" %> <%@ taglib uri="/tags/struts-html" prefix="html" %> <%@ taglib uri="/tags/struts-logic" prefix="logic" %> <logic:messagesPresent> <ul> <html:messages id="error"> <li><bean:write name="error"/></li> </html:messages> </ul><hr /> </logic:messagesPresent> <html:html> <html:form action="uploadsAction.do" enctype="multipart/form-data"> <html:file property="theFile"/> <html:submit/> </html:form> </html:html>
表单bean: UpLoadForm.java
- package org.apache.struts.webapp.upload;
- import javax.servlet.http.HttpServletRequest;
- import org.apache.struts.action.*;
- import org.apache.struts.upload.*;
- /**
- * <p>Title:UpLoadForm</p>
- * <p>Description: QRRSMMS </p>
- * <p>Copyright: Copyright (c) 2004 jiahansoft</p>
- * <p>Company: jiahansoft</p>
- * @author wanghw
- * @version 1.0
- */
- public class UpLoadForm extends ActionForm {
- public static final String ERROR_PROPERTY_MAX_LENGTH_EXCEEDED = "org.apache.struts.webapp.upload.MaxLengthExceeded";
- protected FormFile theFile;
- public FormFile getTheFile() {
- return theFile;
- }
- public void setTheFile(FormFile theFile) {
- this.theFile = theFile;
- }
- public ActionErrors validate(
- ActionMapping mapping,
- HttpServletRequest request) {
- ActionErrors errors = null;
- //has the maximum length been exceeded?
- Boolean maxLengthExceeded =
- (Boolean) request.getAttribute(
- MultipartRequestHandler.ATTRIBUTE_MAX_LENGTH_EXCEEDED);
- if ((maxLengthExceeded != null) && (maxLengthExceeded.booleanValue())) {
- errors = new ActionErrors();
- errors.add(
- ActionMessages.GLOBAL_MESSAGE ,
- new ActionMessage("maxLengthExceeded"));
- errors.add(
- ActionMessages.GLOBAL_MESSAGE ,
- new ActionMessage("maxLengthExplanation"));
- }
- return errors;
- }
- }
package org.apache.struts.webapp.upload; import javax.servlet.http.HttpServletRequest; import org.apache.struts.action.*; import org.apache.struts.upload.*; /** * <p>Title:UpLoadForm</p> * <p>Description: QRRSMMS </p> * <p>Copyright: Copyright (c) 2004 jiahansoft</p> * <p>Company: jiahansoft</p> * @author wanghw * @version 1.0 */ public class UpLoadForm extends ActionForm { public static final String ERROR_PROPERTY_MAX_LENGTH_EXCEEDED = "org.apache.struts.webapp.upload.MaxLengthExceeded"; protected FormFile theFile; public FormFile getTheFile() { return theFile; } public void setTheFile(FormFile theFile) { this.theFile = theFile; } public ActionErrors validate( ActionMapping mapping, HttpServletRequest request) { ActionErrors errors = null; //has the maximum length been exceeded? Boolean maxLengthExceeded = (Boolean) request.getAttribute( MultipartRequestHandler.ATTRIBUTE_MAX_LENGTH_EXCEEDED); if ((maxLengthExceeded != null) && (maxLengthExceeded.booleanValue())) { errors = new ActionErrors(); errors.add( ActionMessages.GLOBAL_MESSAGE , new ActionMessage("maxLengthExceeded")); errors.add( ActionMessages.GLOBAL_MESSAGE , new ActionMessage("maxLengthExplanation")); } return errors; } }
处理上传的文件:UpLoadAction.java
- package org.apache.struts.webapp.upload;
- import java.io.*;
- import javax.servlet.http.*;
- import org.apache.struts.action.*;
- import org.apache.struts.upload.FormFile;
- /**
- * <p>Title:UpLoadAction</p>
- * <p>Description: QRRSMMS </p>
- * <p>Copyright: Copyright (c) 2004 jiahansoft</p>
- * <p>Company: jiahansoft</p>
- * @author wanghw
- * @version 1.0
- */
- public class UpLoadAction extends Action {
- public ActionForward execute(ActionMapping mapping,
- ActionForm form,
- HttpServletRequest request,
- HttpServletResponse response)
- throws Exception {
- if (form instanceof UpLoadForm) {//如果form是UpLoadsForm
- String encoding = request.getCharacterEncoding();
- if ((encoding != null) && (encoding.equalsIgnoreCase("utf-8")))
- {
- response.setContentType("text/html; charset=gb2312");
- }
- UpLoadForm theForm = (UpLoadForm ) form;
- FormFile file = theForm.getTheFile();//取得上传的文件
- String contentType = file.getContentType();
- String size = (file.getFileSize() + " bytes");//文件大小
- String fileName= file.getFileName();//文件名
- try {
- InputStream stream = file.getInputStream();//把文件读入
- String filePath = request.getRealPath("/");//取当前系统路径
- ByteArrayOutputStream baos = new ByteArrayOutputStream();
- OutputStream bos = new FileOutputStream(filePath + "/" +
- file.getFileName());
- //建立一个上传文件的输出流,将上传文件存入web应用的根目录。
- //System.out.println(filePath+"/"+file.getFileName());
- int bytesRead = 0;
- byte[] buffer = new byte[8192];
- while ( (bytesRead = stream.read(buffer, 0, 8192)) != -1) {
- bos.write(buffer, 0, bytesRead);//将文件写入服务器
- }
- bos.close();
- stream.close();
- }catch(Exception e){
- System.err.print(e);
- }
- //request.setAttribute("dat",file.getFileName());
- request.setAttribute("contentType", contentType);
- request.setAttribute("size", size);
- request.setAttribute("fileName", fileName);
- return mapping.findForward("display");
- }
- return null;
- }
- }
package org.apache.struts.webapp.upload; import java.io.*; import javax.servlet.http.*; import org.apache.struts.action.*; import org.apache.struts.upload.FormFile; /** * <p>Title:UpLoadAction</p> * <p>Description: QRRSMMS </p> * <p>Copyright: Copyright (c) 2004 jiahansoft</p> * <p>Company: jiahansoft</p> * @author wanghw * @version 1.0 */ public class UpLoadAction extends Action { public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { if (form instanceof UpLoadForm) {//如果form是UpLoadsForm String encoding = request.getCharacterEncoding(); if ((encoding != null) && (encoding.equalsIgnoreCase("utf-8"))) { response.setContentType("text/html; charset=gb2312"); } UpLoadForm theForm = (UpLoadForm ) form; FormFile file = theForm.getTheFile();//取得上传的文件 String contentType = file.getContentType(); String size = (file.getFileSize() + " bytes");//文件大小 String fileName= file.getFileName();//文件名 try { InputStream stream = file.getInputStream();//把文件读入 String filePath = request.getRealPath("/");//取当前系统路径 ByteArrayOutputStream baos = new ByteArrayOutputStream(); OutputStream bos = new FileOutputStream(filePath + "/" + file.getFileName()); //建立一个上传文件的输出流,将上传文件存入web应用的根目录。 //System.out.println(filePath+"/"+file.getFileName()); int bytesRead = 0; byte[] buffer = new byte[8192]; while ( (bytesRead = stream.read(buffer, 0, 8192)) != -1) { bos.write(buffer, 0, bytesRead);//将文件写入服务器 } bos.close(); stream.close(); }catch(Exception e){ System.err.print(e); } //request.setAttribute("dat",file.getFileName()); request.setAttribute("contentType", contentType); request.setAttribute("size", size); request.setAttribute("fileName", fileName); return mapping.findForward("display"); } return null; } }
成功页display.jsp
- <%@ page contentType="text/html; charset=GBK" %>
- <%@ page import="org.apache.struts.action.*,
- java.util.Iterator,
- org.apache.struts.Globals" %>
- <%@ taglib uri="/tags/struts-html" prefix="html" %>
- 上传成功!上传信息如下:
- <p>
- <b>The File name:</b> <%= request.getAttribute("fileName") %>
- </p>
- <p>
- <b>The File content type:</b> <%= request.getAttribute("contentType") %>
- </p>
- <p>
- <b>The File size:</b> <%= request.getAttribute("size") %>
- </p>
- <hr />
- <hr />
- <html:link module="/upload" page="/upload.do"> 继续上传</html:link></h2>
<%@ page contentType="text/html; charset=GBK" %> <%@ page import="org.apache.struts.action.*, java.util.Iterator, org.apache.struts.Globals" %> <%@ taglib uri="/tags/struts-html" prefix="html" %> 上传成功!上传信息如下: <p> <b>The File name:</b> <%= request.getAttribute("fileName") %> </p> <p> <b>The File content type:</b> <%= request.getAttribute("contentType") %> </p> <p> <b>The File size:</b> <%= request.getAttribute("size") %> </p> <hr /> <hr /> <html:link module="/upload" page="/upload.do"> 继续上传</html:link></h2>
六、测试
从本站下载整个目录结构TestStruts并放入tomcat的webapps目录下,在浏览器中输入:
http://127.0.0.1:8080/TestStruts/upload/upload.do
原文:http://jc-dreaming.iteye.com/blog/637923
发表评论
-
SQL生成 日期+流水号 的编号
2011-08-26 17:30 3032--以下代码生成的编号长度为12,前6位为日期信息,格式为YY ... -
转解决Firefox3,IE7,IE8上传图片预览
2011-08-08 15:00 1723网上找了不少资料发现以下两个原因导致Firefox3,IE7, ... -
String []split
2011-08-04 16:39 1135public static void main(String[ ... -
处理时间
2011-08-03 14:56 1052/*--------处理订单时间------begin---- ... -
java.lang.IndexOutOfBoundsException: Index: 7, Size: 7
2011-07-29 09:33 5529/** * 处在开放注册期内的代理订单 ... -
转javax.xml.datatype.XMLGregorianCalendar
2011-07-22 11:58 3926原文:http://xiyangzk.iteye.com/bl ... -
转Holder模式
2011-07-12 17:00 1164原文:http://badqiu.iteye.com/blog ... -
多线程并发访问解决方案 转
2011-06-16 10:48 955原文:http://incan.iteye.com ... -
小例子--当前时间加三天时间减一秒
2011-06-01 11:41 2989public static void main(String[ ... -
解决办法:服务器未能识别 HTTP 标头 SOAPAction 的值 转载
2011-06-01 09:25 7630这个是昨天快要下班的 ... -
java防SQL注入html编码入侵特殊字符转义和方法入参检测工具(Spring) ---转载
2011-05-17 09:54 2579Spring 不但提供了一个功 ... -
特殊字符转义 --转载
2011-05-16 17:23 1243原文:http://xhpscdx.iteye.com/blo ... -
session 跨域---未解决
2011-05-10 09:24 1206session 跨域的问题是这样的:用户在a系统登录之后,再去 ... -
web.xml里<filter-mapping>中的<dispatcher>
2011-04-07 09:28 9882.4版本的servlet规范在部属描述符中新增加了 ... -
struts1 和struts2 整合 转
2011-04-06 11:56 1277h项目使用struts1 框架,对于struts1的Web.x ... -
Struts2.0 web.xml 配置文件
2011-04-06 11:51 1857原文:http://thelongestday.iteye.c ... -
关于textarea自动生成N多空格的恶心问题
2011-03-17 12:27 1958textarea自动产生多个空格的问题,一开始以为css样式控 ... -
转载 单点登录知识点(2)
2011-03-05 00:53 1267原文:http://linliangyi2007.iteye. ... -
转载 单点登录知识点(1)
2011-03-05 00:43 1125原文:http://linliangyi2007.iteye. ... -
转载 单点登录(3)
2011-03-05 00:02 1169原文:http://www.iteye.com/topic/ ...
相关推荐
在Struts2中,文件上传是常见的功能,用于允许用户在网页上上传文件到服务器。这个压缩包包含了实现Struts2文件上传所需的全部jar包,这些库文件对于理解和实现文件上传功能至关重要。 首先,我们要了解Struts2文件...
在Struts2框架下实现文件上传,主要涉及到以下几个核心概念和技术点: 1. **.struts2配置**:在Struts2框架中,需要在`struts.xml`配置文件中添加相应的action配置,声明文件上传的处理方法。通常,你需要设置`...
本文将详细讲解Struts2框架中实现文件上传的两种常见方法,并探讨相关的注意事项和技术要点。 首先,我们需要了解Struts2中文件上传的基础知识。Struts2通过`struts2-core`库提供的`FileUpload`拦截器来处理文件...
在Web应用开发中,文件上传是一个非常常见的需求。Apache Struts作为一款成熟的MVC框架,在处理文件上传方面有着独特的优势。本文将详细解析如何使用Struts框架实现多文件上传的功能,并对相关的代码进行深入分析。 ...
本文将详细介绍如何在Struts1中实现单文件上传和多文件上传,并探讨如何解决上传文件大小限制的问题。 #### 二、单文件上传 ##### 1. JSP页面设计 为了实现单文件上传,我们需要在JSP页面中创建一个表单,该表单...
Struts2文件批量上传是Java Web开发中常见的一种功能,主要应用于网站后台处理大量用户上传的文件,如图片、文档等。Struts2是一个强大的MVC框架,它提供了丰富的功能来支持文件上传操作,包括单个文件上传和批量...
在MyEclipse环境下,开发Struts文件上传应用通常包括以下步骤: 1. **创建Web工程**:在MyEclipse中新建一个Dynamic Web Project,导入Struts库。 2. **配置Web.xml**:添加Struts的前端控制器DispatcherServlet。...
在Struts2的配置文件中,我们需要定义一个对应的action配置,设置input和result,以便正确处理文件上传请求和响应。 接下来,涉及到的是Hibernate的部分。当图片文件被上传并保存在服务器上后,我们可能需要将文件...
在Struts 1.2框架中,文件上传是一个常见的需求,尤其在开发Web应用程序时。Struts 1.2提供了一种便捷的方式来处理文件上传,它通过`org.apache.struts.upload.FormFile`类来实现。这个类是Struts 1.x版本中处理文件...
首先,我们来了解一下Struts文件上传的基本步骤: 1. **配置struts.xml**:在Struts配置文件中,你需要定义一个Action,这个Action将处理文件上传请求。通过`<action>`标签设置`executeResult`方法,以及与之关联的...
在Struts2中,文件上传是常见的功能之一,允许用户通过网页将本地文件传输到服务器。这个功能在处理用户上传图片、文档或其他数据时非常有用。 在实现Struts2文件上传时,我们需要了解以下几个核心知识点: 1. **...
总结来说,在Struts 2中实现文件上传涉及以下几个步骤: 1. 引入Commons FileUpload和Commons IO库。 2. 配置Struts 2以启用文件上传。 3. 创建Action类,处理上传的文件。 4. 创建表单并指定提交方式为POST,设置`...
Struts文件上传是一个在Java Web开发中常见的功能,主要用于让用户上传文件到服务器。Struts是Apache软件基金会的一个开源项目,它提供了一种用于构建企业级Web应用的MVC(Model-View-Controller)框架。在Struts...
在Struts 1中,文件上传是一个常见的功能,它允许用户通过网页表单上传文件到服务器。这个源码包可能是为了帮助开发者理解如何在Struts 1框架下实现文件上传功能。 在Struts 1中,文件上传通常涉及到以下几个核心...
在“多文件上传、文件上传与国际化”这个主题中,我们将探讨Struts04如何处理文件上传操作,以及如何实现应用程序的国际化支持。 首先,文件上传在Web开发中是一个常见的需求,例如用户可能需要上传图片、文档或...
以上就是Web开发中文件上传的几种常见方法,每种方法都有其适用场景和优缺点,开发者应根据项目需求选择合适的技术。在实际应用中,还需要考虑安全性、性能优化等问题,如限制文件大小、类型、防止恶意文件上传等。
文件上传下载是Web应用中常见的功能,特别是在教育、协作和资源共享平台中。Struts框架提供了一种方便的方式来处理文件上传和下载。以下是对Struts中文件上传下载的详细讲解: 首先,文件上传需要考虑几个关键问题...
### 关于文件上传与下载的实现方法总结 在软件开发特别是Web应用开发中,文件的上传与下载是非常常见的功能需求之一。本文将详细介绍文件上传与下载的多种实现方法,并特别聚焦于通过Java语言来实现这些功能的具体...
本项目结合了jsp和servlet技术,同时也提供了与SSH框架的集成,使得文件上传功能可以在各种Java Web项目中无缝应用。 首先,我们要了解SwfUpload的基本原理。SwfUpload是一个基于Flash的小型控件,用户可以通过它在...