struts2中实现多个文件同时上传代码

时间:2023-05-11 16:24:39 

在upload.jsp页面中将多个文件域对象命名为相同的名字,这样在action中就可以将多个文件域解析成一个数组,数组的大小就是文件域的个数,同时一个文件域解析成三个对应的变量,因此多个文件域对应三个数组,其中每个数组的大小就是文件域的个数。jsp页面代码如下:


<form action="upload.action" name="uploadForm" method="post" enctype="multipart/form-data">
文件标题:<input type="text" name="title"/><br/>
选择文件-:<input type="file" name="upload"/><br/>
选择文件二:<input type="file" name="upload"/><br/>
选择文件三:<input type="file" name="upload"/><br/>
<input type="submit" value="upload"/>

</form>


对应的Action依次遍历所有文件域,然后生成对应的输入文件流,输出文件流在指定的服务器保存路径中添加对应的输出文件流保存文件。同时动态指定服务器上文件的 保存路径。

action代码如下:


package com.inspur.action;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;

import org.apache.struts2.ServletActionContext;

import com.opensymphony.xwork2.ActionSupport;

public class UploadAction extends ActionSupport {
private String title;
private File[] upload;
private String[] uploadFileName;
private String[] uploadContentType;
private String savePath;

public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public File[] getUpload() {
return upload;
}
public void setUpload(File[] upload) {
this.upload = upload;
}
public String[] getUploadFileName() {
return uploadFileName;
}
public void setUploadFileName(String[] uploadFileName) {
this.uploadFileName = uploadFileName;
}
public String[] getUploadContentType() {
return uploadContentType;
}
public void setUploadContentType(String[] uploadContentType) {
this.uploadContentType = uploadContentType;
}
public String getSavePath() {
return ServletActionContext.getRequest().getRealPath(savePath);
}
public void setSavePath(String savePath) {
this.savePath = savePath;
}
public String upload()throws Exception{
File[] files=this.getUpload();
for(int i=0;i<files.length;i++){
FileOutputStream fos=new FileOutputStream(this.getSavePath()+"\\"+this.getUploadFileName()[i]);
byte[] buffer=new byte[1024];
FileInputStream fis=new FileInputStream(files[i]);
int len=0;
while((len=fis.read(buffer))>0){
fos.write(buffer,0,len);
}
}


return SUCCESS;
}

}


struts.xml文件配置如下:配置文件上传的 * ,允许 的上传文件类型,上传文件大小限制,同时引入defaultStack * 和上传文件在服务器上的保存位置


<struts>
<constant name="struts.custom.i18n.resources" value="message"></constant>
<constant name="struts.i18n.encoding" value="gbk"></constant>
<package name="uploadMult" extends="struts-default" namespace="/">
<action name="upload" class="com.inspur.action.UploadAction" method="upload">
<interceptor-ref name="fileUpload">
<param name="allowedTypes">image/bmp,image/png,image/gif,image/jpeg</param>
<param name="maximumSize">20000000000</param>
</interceptor-ref>
<interceptor-ref name="defaultStack"></interceptor-ref>
<param name="savePath">/upload</param>
<result name="success">/success.jsp</result>
<result name="input">/upload.jsp</result>
<result name="error">/error.jsp</result>
</action>
</package>

</struts>


web.xml文件代码如下:配置了struts-cleanup过滤器,对文件的上传功能没有直接的影响,但是作为struts核心过滤器的辅助类是系统更加稳定,消除未知的异常。


<filter>
<filter-name>struts-cleanup</filter-name>
<filter-class>org.apache.struts2.dispatcher.ActionContextCleanUp</filter-class>
</filter>
<filter-mapping>
<filter-name>struts-cleanup</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>


在上传成功界面显示所有上传的图片:

success.jsp页面代码如下:


文件标题:<s:property value="title"/><br/>
第一个图片:<img alt="first" src="<s:property value="'upload/'+uploadFileName[0]"/>"/><br/>
第二个图片:<img alt="second" src="<s:property value="'upload/'+uploadFileName[1]"/>"/><br/>


strus2同样支持使用list同时上传多个文件,其原理和数组是相同的,没有根本的差别。只不过就是将数组全部改成list。并且修改list的访问方法就可以用list来封装文件域参数。实现多个文件的同时上传。

标签:多文件,上传
0
投稿

猜你喜欢

  • C#中怎么将一个List转换为只读的

    2021-10-04 15:52:51
  • jdk-logging log4j logback日志系统实现机制原理介绍

    2022-03-22 11:45:28
  • vscode设置Fira_Code字体及改变编辑器字体、背景颜色的代码详解

    2023-05-22 21:00:17
  • 详解Java8 CompletableFuture的并行处理用法

    2023-07-27 11:48:06
  • ShardingSphere jdbc实现分库分表核心概念详解

    2023-11-24 12:09:45
  • android 实现按钮浮动在键盘上方的实例代码

    2022-12-21 11:32:33
  • JAVA实现账户取款和存款操作

    2023-08-22 16:31:45
  • C# Distinct和重写IEqualityComparer时要知道的二三事

    2023-07-11 15:41:20
  • springboot2启动时执行,初始化(或定时任务)servletContext问题

    2022-10-18 13:14:30
  • C#多线程系列之进程同步Mutex类

    2022-07-11 19:29:16
  • java基础实现猜数字小游戏

    2021-05-24 07:53:25
  • C#判断当前程序是否通过管理员运行的方法

    2023-09-27 15:48:24
  • Intellij IDEA 配置Subversion插件实现步骤详解

    2023-11-03 10:09:04
  • JAVA实现KMP算法理论和示例代码

    2021-08-06 07:13:44
  • IDEA设置maven修改settings.xml配置文件无法加载仓库的解决方案

    2023-08-23 22:39:35
  • 利用Postman和Chrome的开发者功能探究项目(毕业设计项目)

    2021-10-27 10:19:43
  • Knife4j 3.0.3 整合SpringBoot 2.6.4的详细过程

    2023-11-25 03:54:34
  • C#实现简单聊天程序的方法

    2022-01-02 22:31:20
  • Android利用FlexboxLayout轻松实现流动布局

    2021-06-24 02:41:53
  • Spring FreeMarker整合Struts2过程详解

    2023-03-01 00:30:52
  • asp之家 软件编程 m.aspxhome.com