Struts2实现多文件上传功能

时间:2021-09-01 22:47:36

前台form 表单:设置method=post,enctype=multipart/form-data。

struts2在原有的上传解析器继承上做了进一步封装,更进一步简化了文件上传。

action需要使用3个属性来封装该文件域的信息:

(1)类型为file的*属性封装了该文件域对应的文件内容;
(2)类型为string的***filename属性封装了该文件域对应的文件的文件类型;
(3)类型为string的***contenttype属性封装了该文件域对应的文件的类型。

具体实现:

新建web项目

Struts2实现多文件上传功能

添加struts2相关包
myeclipse可直接下载,右击项目,如下。

Struts2实现多文件上传功能

前台

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<%@ page language="java" import="java.util.*" pageencoding="utf-8"%>
<%
string path = request.getcontextpath();
string basepath = request.getscheme()+"://"+request.getservername()+":"+request.getserverport()+path+"/";
%>
<html>
 <body>
  <form action="upload.action" method="post" enctype="multipart/form-data">
    <input type="file" name="upload" multiple="multiple"/>
    <input type="submit" value="提交"/>
 
  </form>
 </body>
</html>

配置web.xml

?
1
2
3
4
5
6
7
8
9
10
11
12
<?xml version="1.0" encoding="utf-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/xmlschema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemalocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0">
 <display-name>uploadfile</display-name>
 <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>
</web-app>

配置struts.xml

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?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>
    <interceptor-ref name="defaultstack"></interceptor-ref>
    </action>
  </package>
</struts> 

后台代码

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
public class uploadaction extends actionsupport{
  private list<file> upload;
  private list<string> uploadcontenttype;
  private list<string> uploadfilename;
 
  public list<file> getupload() {
    return upload;
  }
 
  public void setupload(list<file> upload) {
    this.upload = upload;
  }
 
  public list<string> getuploadcontenttype() {
    return uploadcontenttype;
  }
 
  public void setuploadcontenttype(list<string> uploadcontenttype) {
    this.uploadcontenttype = uploadcontenttype;
  }
 
  public list<string> getuploadfilename() {
    return uploadfilename;
  }
 
  public void setuploadfilename(list<string> uploadfilename) {
    this.uploadfilename = uploadfilename;
  }
 
  @override
  public string execute() throws exception {
    //文件保存路径
    string path = servletactioncontext.getservletcontext().getrealpath("/images");
    file file = new file(path);
    //不存在则创建
    if(!file.exists()){
      file.mkdir();
    }
    //循环将文件上传到指定路径
    for(int i = 0; i< upload.size(); i++){
      fileutils.copyfile(upload.get(i), new file(file,uploadfilename.get(i)));
    }
    return success;
  }

结果如下

Struts2实现多文件上传功能

Struts2实现多文件上传功能

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。

原文链接:http://blog.csdn.net/giving_bestself/article/details/77513177