Struts1和Struts2的文件上传
1 Struts1文件上传
1.1 表单设计
<form action="upload" method="post" enctype="multipart/form-data"> 请选择要上传的文件: <input type="file" name="upload"> <input type="submit" value="上传文件"> </form>
1.2 在struts-config.xml进行如下配置
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.3//EN" "http://struts.apache.org/dtds/struts-config_1_3.dtd"> <struts-config> <form-beans > <form-bean name="uploadForm" type="com.upload.form.UploadForm"/> </form-beans> <global-exceptions /> <global-forwards /> <action-mappings > <action path="/upload" name="uploadForm" type="com.upload.action.UploadAction" > <forward name="error" path="/error.jsp"/> </action> </action-mappings> <!-- 可以在此处设置上传文件的大小 <controller maxFileSize="10M"/> --> </struts-config>
1.3 创建UploadForm类收集表单数据
package com.upload.form; import org.apache.struts.action.ActionForm; import org.apache.struts.upload.FormFile; public class UploadForm extends ActionForm { private FormFile uploadFile; public FormFile getUploadFile() { return uploadFile; } public void setUploadFile(FormFile uploadFile) { this.uploadFile = uploadFile; } }
1.4 创建UploadAction类实现文件上传
package com.upload.action; import java.io.File; import java.io.FileOutputStream; import java.io.InputStream; import java.io.OutputStream; import java.util.regex.Matcher; import java.util.regex.Pattern; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.struts.action.Action; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionForward; import org.apache.struts.action.ActionMapping; import org.apache.struts.upload.FormFile; import com.upload.form.UploadForm; public class UploadAction extends Action { @Override public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { // 获取UploadForm实例 UploadForm uploadForm = (UploadForm) form; // 获取表单中上传的文件 FormFile uploadFile = uploadForm.getUploadFile(); // 若上传的文件不为空,且文件大小<80KB if (uploadFile != null && uploadFile.getFileSize() < 80 * 1024) { // 获取文件名 String fileName = uploadFile.getFileName(); // 编译一个文件后缀为jpg、png、gif的正则表达式 // \w+代表最少有一个任何一个字母或者数字或者下划线,最多不限制 Pattern pattern = Pattern .compile("^(?:\\w+\\.jpg|\\w+\\.png|\\w+\\.gif)$"); Matcher matcher = pattern.matcher(fileName); if (!matcher.matches()) { //在此返回错误提示页面 } // 创建新的文件名称 String newFileName = String.valueOf(System.currentTimeMillis()) + fileName.substring(fileName.lastIndexOf("\\") + 1); // 在服务器根目录下创建images文件夹 String realpath = request.getSession().getServletContext() .getRealPath("/images"); // 在该文件夹下创建上传文件的文件对象 File file = new File(realpath, newFileName); // 如果上传文件所在的文件夹不存在,则创建 if (!file.getParentFile().exists()) file.getParentFile().mkdir(); // 建立文件输出流 OutputStream outStream = new FileOutputStream(file); // 第一种上传方式 InputStream inStream = uploadFile.getInputStream(); byte[] data = new byte[1024]; int len = 0; while ((len = inStream.read(data)) != -1) { outStream.write(data, 0, len); } // 第二种上传方式 // outStream.write(uploadFile.getFileData()); // 上传结束 outStream.flush(); outStream.close(); } return null; } }
2 Struts2文件上传
2.1 设计表单
<form action="upload" method="post" enctype="multipart/form-data"> 请选择要上传的文件: <input type="file" name="upload"> <input type="submit" value="上传文件"> </form>
2.2 在struts.xml中进行配置
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd"> <struts> <!-- 可以在此设置上传文件的大小,如超过这个大小,则抛出异常 <constant name="struts.multipart.maxSize" value="80 * 1000"/> --> <package name="upload" namespace="/" extends="struts-default"> <action name="upload" class="com.upload.action.UploadAction" method="uploadFile"> <result name="success">/index.jsp</result> </action> </package> </struts>
2.3 创建UploadAction类实现文件上传
package com.upload.action; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import org.apache.commons.io.FileUtils; import org.apache.struts2.ServletActionContext; public class UploadAction { // 得到上传的文件 private File upload; // 得到上传文件的文件类型 private String uploadContentType; // 得到上传文件的名称 private String uploadFileName; public void setUpload(File upload) { this.upload = upload; } public void setUploadContentType(String uploadContentType) { this.uploadContentType = uploadContentType; } public void setUploadFileName(String uploadFileName) { this.uploadFileName = uploadFileName; } /** * 文件上传 * * @return */ public String uploadFile() { if (upload != null) { // 如果是图片文件 if ("image/pjpeg".equals(uploadContentType) || "image/gif".equals(uploadContentType)) { String newFileName = String.valueOf(System.currentTimeMillis()) + uploadFileName; // 在服务器根目录下创建images文件夹 String realpath = ServletActionContext.getServletContext() .getRealPath("/images"); // 在该文件夹下创建上传文件的文件对象 File destFile = new File(realpath, newFileName); System.out.println(destFile); // 如果上传文件所在的文件夹不存在,则创建 if (!destFile.getParentFile().exists()) destFile.getParentFile().mkdir(); try { // 利用基本方法上传文件 InputStream inStream = new FileInputStream(upload); OutputStream outStream = new FileOutputStream(destFile); byte[] data = new byte[1024]; int len = 0; while ((len = inStream.read(data)) != -1) { outStream.write(data, 0, len); } // 利用Struts2中的FileUtils工具类将上传的文件拷贝到目标文件中 // FileUtils.copyFile(upload, destFile); outStream.flush(); outStream.close(); inStream.close(); } catch (IOException e) { e.printStackTrace(); } } } return "success"; } }
3 Struts2多文件上传
3.1 表单设计
<form action="upload" method="post" enctype="multipart/form-data"> 请选择要上传的文件:<br> <input type="file" name="upload"><br> <input type="file" name="upload"><br> <input type="file" name="upload"><br> <input type="submit" value="上传文件"> </form>
3.2 在struts.xml中进行配置
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd"> <struts> <!-- 可以在此设置上传文件的大小,如超过这个大小,则抛出异常 <constant name="struts.multipart.maxSize" value="80 * 1000"/> --> <package name="upload" namespace="/" extends="struts-default"> <action name="upload" class="com.upload.action.UploadAction" method="uploadFile"> <result name="success">/index.jsp</result> </action> </package> </struts>
3.3 创建UploadAction实现多文件上传
package com.upload.action; import java.io.File; import java.io.IOException; import org.apache.commons.io.FileUtils; import org.apache.struts2.ServletActionContext; public class UploadAction { // 得到上传的文件 private File[] upload; // 得到上传文件的文件类型 private String[] uploadContentType; // 得到上传文件的名称 private String[] uploadFileName; public void setUpload(File[] upload) { this.upload = upload; } public void setUploadContentType(String[] uploadContentType) { this.uploadContentType = uploadContentType; } public void setUploadFileName(String[] uploadFileName) { this.uploadFileName = uploadFileName; } /** * 文件上传 * * @return */ public String uploadFile() { if (upload != null) { String realpath = ServletActionContext.getServletContext() .getRealPath("/images"); File saveDir = new File(realpath); if (!saveDir.exists()) saveDir.mkdirs(); for (int i = 0; i < upload.length; i++) { if ("image/pjpeg".equals(uploadContentType[i]) || "image/gif".equals(uploadContentType[i])) { String newFileName = String.valueOf(System .currentTimeMillis()) + uploadFileName[i]; File destFile = new File(saveDir, newFileName); try { FileUtils.copyFile(upload[i], destFile); } catch (IOException e) { e.printStackTrace(); } } } } return "success"; } }
--------------------------------------------
补充:
BufferedReader reader = new BufferedReader(new InputStreamReader(uploadFile.getInputStream())); List list = new ArrayList(); reader.readLine();//跳过第一行 String strLine; while ((strLine = reader.readLine()) != null) { String[] str = strLine.split(","); if (str.length > 0) { list .add(str[0]); } }
相关推荐
1. **配置Struts2的文件上传** 在`struts.xml`配置文件中,为需要支持文件上传的Action添加`params`和`fileUpload`拦截器,并设置允许的最大上传大小。例如: ```xml ...
1. **配置Struts2 Action**:在`struts.xml`配置文件中,你需要定义一个Action,该Action负责处理文件上传请求。Action的类需要继承自`ActionSupport`,并覆盖`execute()`方法,以便处理上传的文件。 2. **设置...
总的来说,"struts2+jquery+ajax文件异步上传"是一个结合了后端处理和前端交互的文件上传解决方案,提供了良好的用户体验和灵活性。通过MyEclipse这样的集成开发环境,开发者可以方便地构建、调试和部署这样的项目。
Struts1和Struts2是两个非常著名的Java Web框架,它们都提供了处理文件上传和下载的功能,但实现方式有所不同。本文将深入探讨这两个框架在文件操作方面的具体实现。 首先,让我们了解一下Struts1中的文件上传功能...
总的来说,Struts2的多文件上传通过引入Apache Commons库,提供了简洁的API和配置,使得开发者能轻松处理用户上传的多个文件。无论是使用List集合还是数组,核心原理都是相同的,只是接收上传文件的对象类型不同。...
综上所述,Struts1中的文件上传功能实现涉及到多个核心组件和技术点的综合运用。开发者需要对Struts1框架有深入的理解,并熟练掌握相关API的使用方法。此外,在实际开发过程中还需要注意安全性问题,比如防止恶意...
本文将详细讲解Struts2框架下三种不同的文件上传方式:copy模式、字节流上传和字符流上传。 1. Copy模式文件上传: Copy模式是Struts2提供的一种简单易用的文件上传方式。它通过Struts2的`FileUploadInterceptor`...
在Struts2中,文件上传和下载是常见的功能需求,对于用户交互和数据交换至关重要。以下是对这些知识点的详细阐述: 1. **文件上传**: 在Struts2中,文件上传主要依赖于`Commons FileUpload`库,它是一个Apache提供...
在Struts中,可以实现单文件和多文件的上传,并且为了提升用户体验,我们还可以添加进度条来显示文件上传的状态。本文将详细介绍如何在Struts中实现这两个功能,并带上传进度条。 首先,我们需要了解Struts中处理...
struts2 文件上传 struts2上传标签file fileuploadstruts2 文件上传 struts2上传标签file fileuploadstruts2 文件上传 struts2上传标签file fileupload
SWFUpload 是一款开源的Flash上传组件,...通过上述步骤和注意事项,你可以利用SWFUpload和Struts2构建一个功能强大且安全的多文件上传功能。在实际项目中,根据需求进行适当的定制和优化,以满足用户需求和系统安全。
在Struts1中实现文件上传,我们需要考虑前端的HTML表单、ActionForm、Struts配置文件以及后台的Action处理。 首先,前端实现是通过一个支持多文件选择的HTML表单来完成的。表单需要设置`enctype="multipart/form-...
1. **配置Struts2 Action**:在Struts2中,我们需要创建一个Action类来处理文件上传请求。这个类通常需要实现`ServletRequestAware`接口,以便可以直接访问HttpServletRequest对象,从中获取上传文件。 2. **添加...
Struts1是一个经典的Java Web框架,它为开发者提供了一种结构化的MVC(Model-View-Controller)设计模式实现方式,极大地简化了Web...然而,了解Struts1的文件上传对于理解MVC模式和Web开发的基本原理仍然很有价值。
在Struts2框架中,文件上传是通过特定的拦截器实现的,这些拦截器处理了文件上传请求并提供了安全性和大小限制。下面将详细讨论这个主题。 首先,我们来看配置拦截器的部分。在Struts2中,`struts.xml`是配置文件,...
这个压缩包包含了实现Struts2文件上传所需的全部jar包,这些库文件对于理解和实现文件上传功能至关重要。 首先,我们要了解Struts2文件上传的基本流程。当用户通过表单提交包含文件输入字段的请求时,Struts2框架会...
1. **.struts2配置**:在Struts2框架中,需要在`struts.xml`配置文件中添加相应的action配置,声明文件上传的处理方法。通常,你需要设置`<result>`类型为`stream`,以便处理上传的文件。 2. **Action类**:创建一...
本实例主要探讨如何在Struts1中实现多文件上传功能,并结合Form中传递List类型的数据,这对于理解MVC模式下的文件处理和数据传递有重要作用。我们将深入讨论以下几个关键知识点: 1. **Struts1框架基础**: Struts...
2. **后端处理**:在Struts1的Action中,我们需要自定义一个ActionForm,扩展`org.apache.struts.action.ActionForm`,并重写`execute()`方法来处理文件上传。在这个方法里,可以使用`FormFile`对象获取文件,并将其...
Struts1的fileupload的文件上传