Struts2实现文件上传功能实例解析
作者:Giving_bestself 发布时间:2023-11-04 04:56:13
一、 搭建struts2环境
在myeclipse下,右击项目->MyEclipse->Project Facets->install Apache Struts2。
如要自己搭建,需下载struts2包,写struts.xml配置文件。
web.xml文件配置如下:
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>*.action</url-pattern>
</filter-mapping>
二、 文件上传
1.前台页面:
上传页面:
<body>
<form action="upload.action" method="post" enctype="multipart/form-data">
<input type="file" name="upload"/>
<input type="submit" value="提交"/>
<br>
${result}
</form>
</body>
input name属性与后台命名一致。
上传失败页面:
<body>
<h2>上传失败</h2>
<s:fielderror></s:fielderror>
</body>
需:
<%@ taglib uri="/struts-tags" prefix="s"%>
2.后台Action
主要属性upload,uploadContentType,uploadFileName。
package com.yf.action;
import java.io.File;
import org.apache.commons.io.FileUtils;
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.ActionSupport;
public class UploadAction extends ActionSupport{
private File upload;
private String uploadContentType;
private String uploadFileName;
private String result;
public File getUoload() {
return upload;
}
public void setUpload(File upload) {
this.upload = upload;
}
public String getUploadContentType() {
return uploadContentType;
}
public void setUploadContentType(String uploadContentType) {
this.uploadContentType = uploadContentType;
}
public String getUploadFileName() {
return uploadFileName;
}
public void setUploadFileName(String uploadFileName) {
this.uploadFileName = uploadFileName;
}
public String getResult() {
return result;
}
public void setResult(String result) {
this.result = result;
}
@Override
public String execute() throws Exception {
String path = ServletActionContext.getServletContext().getRealPath("/images");
File file = new File(path);
if(!file.exists()){
file.mkdir();
}
System.out.println(upload);
FileUtils.copyFile(upload, new File(file,uploadFileName));
result = "上传成功";
return SUCCESS;
}
}
3.struts.xml文件配置
配置action及配置 * 限制上传文件的类型及大小。
<?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.enable.DynamicMethodInvocation" value="false"/>
<constant name="struts.devMode" value="true"/>
<constant name="struts.multipart.saveDir" value="/tmp"/>
<constant name="struts.custom.i18n.resources" value="app"></constant>
<package name="default" namespace="/" extends="struts-default">
<action name="upload" class="com.yf.action.UploadAction">
<result>/index.jsp</result>
<result name="input">/error.jsp</result>
<!-- 配置 * 限制上传文件的类型及大小 -->
<interceptor-ref name="fileUpload">
<param name="allowedTypes">image/bmp,image/x-png,image/gif,image/jpeg</param>
<param name="maximumSize">2M</param>
</interceptor-ref>
<interceptor-ref name="defaultStack"></interceptor-ref>
</action>
</package>
</struts>
4.新建properties文件
文件上传失败信息显示到前台,处理显示出错信息。
文件内容如下:
struts.messages.error.file.too/large=\u4E0A\u4F20\u6587\u4EF6\u592A\u5927\u4E86\uFF01
struts.messages.error.content.type.not.allowed=\u4E0A\u4F20\u6587\u4EF6\u7C7B\u578B\u4E0D\u7B26\uFF01
即添加:
Name:struts.messages.error.file.too/large
value : 上传文件太大了!
Name : struts.messages.error.content.type.not.allowed
value: 上传文件类型不符!
运行结果如下:
选择jpg图片,大小不超过2M,运行后
选择非图片文件:
如需批量上传文件,将后台upload,uploadContentType,uploadFileName均改为List,循环读取上传文件保存到硬盘,前台加入input ,name属性一致。
以上所述是小编给大家介绍的Struts2实现文件上传功能实例解析,希望对大家有所帮助,如果大家有任何疑问欢迎给我留言,小编会及时回复大家的!
来源:http://blog.csdn.net/giving_bestself/article/details/54233172


猜你喜欢
- 当setCanceledOnTouchOutside(true),点击阴影处,dialog dismiss时键盘不消失的问题。如图一开始觉得
- 本文实例讲述了C#实现获取程序路径方法。分享给大家供大家参考。具体如下:获取DLL的目录:Assembly myAssembly = Ass
- 最近学习了继承,多态,集合,设计模式,有一个汽车租凭系统,给大家分享一下:我们首先来看看我们这个系统的效果1.做一个项目,我们首先对项目进行
- 前言可能会涉及到汇编的知识,不过这没有关系,肯定能看懂,看不懂留言,我再做解释。使用到的工具是vs2010。本节只讲继承的特点,公有私有多态
- 前言在一个名为种花家的小镇上,生活着一群热爱编程的人。他们致力于构建出高效、可维护的软件系统,而 Spring Boot 框架成为了他们的不
- 1.位置:如下:如果没有则在相同位置新建一个2. 添加端口号,修改:如图server.port=8080启动项目就会发现端口号已经成为你刚才
- 到现在为止,笔者不敢给流下定义,从概念来讲他应该也是一种数据元素才是。可是在我们前面的代码例子中我们可以看到他更多的好像在表示他是一组处理数
- 本文实例讲述了C#使用WebService结合jQuery实现无刷新翻页的方法。分享给大家供大家参考。具体如下:1. 首先创建数据库、表Ar
- C#的System.Collections命名空间包含可使用的集合类和相关的接口,提供了集合的基本功能。包括了.NET下的非泛型集合类以及非
- 用TabHost 来实现顶部选项卡,上代码:activity_main.xml<?xml version="1.0"
- feign传输List的坑无法直接传输List错误方法1@RequestMapping(value = "/stat/mercha
- 肝了两天,重新整理了下时间工具类,以后我就以该时间工具类进行项目开发了,后会不定期更新功能,也欢迎留言需求,让工具类不断的完善。常量介绍相关
- Math.abs()的实现源码通过三目运算符判断a是否小于0来实现/** * Returns the absolute valu
- 一、题目描述题目实现:一个服务器与多个客户端通信。通过一个服务器与多个客户端进行通信,运行程序,服务器启动后,启动两个客户端程序,然后通过服
- 归并排序(Merge)是将两个(或两个以上)有序表合并成一个新的有序表,即把待排序序列分为若干个子序列,每个子序列是有序的。然后再把有序子序
- 在C#中数组Array,ArrayList,泛型List都能够存储一组对象,但是在开发中根本不知道用哪个性能最高,下面我们慢慢分析分析。一、
- 1 redis主从复制的概念多机环境下,一个redis服务接收写命令,当自身数据与状态发生变化,将其复制到一个或多个redis。这种模式称为
- 一、什么是 RestTemplate?RestTemplate是执行HTTP请求的同步阻塞式的客户端,它在HTTP客户端库(例如JDK Ht
- private void txtBarCode_KeyPress(object sender, KeyPressEventArg
- 同步日志的业务流程处理和日志打印是在同一个线程,日志打印的过程实际上是写文件IO的过程,这个过程是相对耗时的,并且会阻塞主线程的执行,只有日