struts2之多个文件上传

struts2之多个文件上传

通过3种方式模拟多个文件上传,效果如下所示

2011032120584292.png

         

目录结构

 2011032120592080.png

新建Action

第一种方式


package
com.ljq.action;


import
java.io.File;


import
org.apache.commons.io.FileUtils;

import
org.apache.struts2.ServletActionContext;


import
com.opensymphony.xwork2.ActionContext;

import
com.opensymphony.xwork2.ActionSupport;

@SuppressWarnings(

serial

)

public

class
UploadAction
extends
ActionSupport{


private
File[] image;
//
上传的文件



private
String[] imageFileName;
//
文件名称



private
String[] imageContentType;
//
文件类型




public
String execute()
throws
Exception {

ServletActionContext.getRequest().setCharacterEncoding(


UTF-8

);
String realpath

=
ServletActionContext.getServletContext().getRealPath(

/images

);
System.out.println(realpath);

if
(image
!=

null
) {

File savedir

=
new
File(realpath);

if
(
!
savedir.getParentFile().exists())
savedir.getParentFile().mkdirs();

for
(
int
i
=
0
;i
<
image.length;i
++
){

File savefile

=

new
File(savedir, imageFileName[i]);
FileUtils.copyFile(image[i], savefile);
}
ActionContext.getContext().put(


message

,

文件上传成功

);
}

return


success

;
}


public
File[] getImage() {


return
image;
}


public

void
setImage(File[] image) {


this
.image
=
image;
}


public
String[] getImageContentType() {


return
imageContentType;
}


public

void
setImageContentType(String[] imageContentType) {


this
.imageContentType
=
imageContentType;
}


public
String[] getImageFileName() {


return
imageFileName;
}


public

void
setImageFileName(String[] imageFileName) {


this
.imageFileName
=
imageFileName;
}

}

                   

第二种方式


package
com.ljq.action;


import
java.io.File;

import
java.io.FileInputStream;

import
java.io.FileOutputStream;


import
org.apache.struts2.ServletActionContext;


import
com.opensymphony.xwork2.ActionSupport;

/**

* 使用数组上传多个文件
*
*

@author
ljq
*

*/

@SuppressWarnings(


serial

)

public

class
UploadAction2
extends
ActionSupport{


private
File[] image;
//
上传的文件



private
String[] imageFileName;
//
文件名称



private
String[] imageContentType;
//
文件类型



private
String savePath;

@Override

public
String execute()
throws
Exception {

ServletActionContext.getRequest().setCharacterEncoding(


UTF-8

);

//
取得需要上传的文件数组


File[] files
=
getImage();

if
(files
!=
null

&&
files.length
>

0
) {


for
(
int
i
=

0
; i
<
files.length; i
++
) {


//
建立上传文件的输出流, getImageFileName()[i]


System.out.println(getSavePath()
+


\\


+
getImageFileName()[i]);
FileOutputStream fos

=

new
FileOutputStream(getSavePath()
+


\\


+
getImageFileName()[i]);

//
建立上传文件的输入流


FileInputStream fis
=

new
FileInputStream(files[i]);

byte
[] buffer
=

new

byte
[
1024
];

int
len
=

0
;

while
((len
=
fis.read(buffer))
>
0
) {

fos.write(buffer,

0
, len);
}
fos.close();
fis.close();
}
}

return
SUCCESS;
}


public
File[] getImage() {


return
image;
}


public

void
setImage(File[] image) {


this
.image
=
image;
}


public
String[] getImageFileName() {


return
imageFileName;
}


public

void
setImageFileName(String[] imageFileName) {


this
.imageFileName
=
imageFileName;
}


public
String[] getImageContentType() {


return
imageContentType;
}


public

void
setImageContentType(String[] imageContentType) {


this
.imageContentType
=
imageContentType;
}


/**

* 返回上传文件保存的位置
*
*

@return

*

@throws
Exception

*/


public
String getSavePath()
throws
Exception {


return
ServletActionContext.getServletContext().getRealPath(savePath);
}


public

void
setSavePath(String savePath) {


this
.savePath
=
savePath;
}

}

            

第三种方式


package
com.ljq.action;


import
java.io.File;

import
java.io.FileInputStream;

import
java.io.FileOutputStream;

import
java.util.List;


import
org.apache.struts2.ServletActionContext;


import
com.opensymphony.xwork2.ActionSupport;


/**

* 使用List上传多个文件
*
*

@author
ljq
*

*/

@SuppressWarnings(


serial

)

public

class
UploadAction3
extends
ActionSupport {


private
List
<
File
>
image;
//
上传的文件



private
List
<
String
>
imageFileName;
//
文件名称



private
List
<
String
>
imageContentType;
//
文件类型



private
String savePath;

@Override

public
String execute()
throws
Exception {

ServletActionContext.getRequest().setCharacterEncoding(


UTF-8

);

//
取得需要上传的文件数组


List
<
File
>
files
=
getImage();

if
(files
!=

null

&&
files.size()
>

0
) {


for
(
int
i
=

0
; i
<
files.size(); i
++
) {

FileOutputStream fos

=

new
FileOutputStream(getSavePath()
+


\\


+
getImageFileName().get(i));
FileInputStream fis

=

new
FileInputStream(files.get(i));

byte
[] buffer
=

new

byte
[
1024
];

int
len
=

0
;

while
((len
=
fis.read(buffer))
>

0
) {

fos.write(buffer,

0
, len);
}
fis.close();
fos.close();
}
}

return
SUCCESS;
}


public
List
<
File
>
getImage() {


return
image;
}


public

void
setImage(List
<
File
>
image) {


this
.image
=
image;
}


public
List
<
String
>
getImageFileName() {


return
imageFileName;
}


public

void
setImageFileName(List
<
String
>
imageFileName) {


this
.imageFileName
=
imageFileName;
}


public
List
<
String
>
getImageContentType() {


return
imageContentType;
}


public

void
setImageContentType(List
<
String
>
imageContentType) {


this
.imageContentType
=
imageContentType;
}


/**

* 返回上传文件保存的位置
*
*

@return

*

@throws
Exception

*/


public
String getSavePath()
throws
Exception {


return
ServletActionContext.getServletContext().getRealPath(savePath);
}


public

void
setSavePath(String savePath) {


this
.savePath
=
savePath;
}

}

              

struts.xml配置文件


<?
xml version
=

1.0

encoding
=

UTF-8


?>


<!
DOCTYPE struts PUBLIC


-//Apache Software Foundation//DTD Struts Configuration 2.0//EN




http://struts.apache.org/dtds/struts-2.0.dtd

>


<
struts
>


<!–
该属性指定需要Struts2处理的请求后缀,该属性的默认值是action,即所有匹配
*
.action的请求都由Struts2处理。
如果用户需要指定多个请求后缀,则多个后缀之间以英文逗号(,)隔开。

–>


<
constant name
=

struts.action.extension

value
=

do


/>


<!–
设置浏览器是否缓存静态内容,默认值为true(生产环境下使用),开发阶段最好关闭
–>


<
constant name
=

struts.serve.static.browserCache

value
=

false


/>


<!–
当struts的配置文件修改后,系统是否自动重新加载该文件,默认值为false(生产环境下使用),开发阶段最好打开
–>


<
constant name
=

struts.configuration.xml.reload

value
=

true


/>


<!–
开发模式下使用,这样可以打印出更详细的错误信息
–>


<
constant name
=

struts.devMode

value
=

true


/>


<!–
默认的视图主题
–>


<
constant name
=

struts.ui.theme

value
=

simple


/>


<!–<
constant name
=

struts.objectFactory

value
=

spring


/>–>


<!–
解决乱码
–>


<
constant name
=

struts.i18n.encoding

value
=

UTF-8


/>


<
constant name
=

struts.multipart.maxSize

value
=

10701096

/>


<
package
name
=

upload

namespace
=

/upload


extends
=

struts-default

>


<
action name
=

*_upload


class
=

com.ljq.action.UploadAction

method
=

{1}

>


<
result name
=

success

>/
WEB

INF
/
page
/
message.jsp
</
result
>


</
action
>


</
package
>


<
package
name
=

upload1

namespace
=

/upload1


extends
=

struts-default

>


<
action name
=

upload1


class
=

com.ljq.action.UploadAction2

method
=

execute

>


<!–
要创建
/
image文件夹,否则会报找不到文件
–>


<
param name
=

savePath

>/
image
</
param
>


<
result name
=

success

>/
WEB

INF
/
page
/
message.jsp
</
result
>


</
action
>


</
package
>


<
package
name
=

upload2

namespace
=

/upload2


extends
=

struts-default

>


<
action name
=

upload2


class
=

com.ljq.action.UploadAction3

method
=

execute

>


<!–
要创建
/
image文件夹,否则会报找不到文件
–>


<
param name
=

savePath

>/
image
</
param
>


<
result name
=

success

>/
WEB

INF
/
page
/
message.jsp
</
result
>


</
action
>


</
package
>


</
struts
>

           

上传表单页面upload.jsp


<%
@ page language
=

java


import
=

java.util.*

pageEncoding
=

UTF-8

%>


<!
DOCTYPE HTML PUBLIC

-//W3C//DTD HTML 4.01 Transitional//EN

>


<
html
>


<
head
>


<
title
>
文件上传
</
title
>


<
meta http

equiv
=

pragma

content
=

no-cache

>


<
meta http

equiv
=

cache-control

content
=

no-cache

>


<
meta http

equiv
=

expires

content
=

0

>


</
head
>


<
body
>


<!–
${pageContext.request.contextPath}
/
upload
/
execute_upload.
do

–>


<!–
${pageContext.request.contextPath}
/
upload1
/
upload1.
do

–>


<!–
${pageContext.request.contextPath}
/
upload2
/
upload2.
do

–>


<!–

–>


<
form action
=

${pageContext.request.contextPath}/upload2/upload2.do

enctype
=

multipart/form-data

method
=

post

>

文件1:

<
input type
=

file

name
=

image

><
br
/>

文件2:

<
input type
=

file

name
=

image

><
br
/>

文件3:

<
input type
=

file

name
=

image

><
br
/>


<
input type
=

submit

value
=

上传


/>


</
form
>


</
body
>


</
html
>

显示页面message.jsp


<%
@ page language
=

java


import
=

java.util.*

pageEncoding
=

UTF-8

%>


<%
@ taglib uri
=

/struts-tags

prefix
=

s

%>


<!
DOCTYPE HTML PUBLIC

-//W3C//DTD HTML 4.01 Transitional//EN

>


<
html
>


<
head
>


<
title
>
My JSP

message.jsp

starting page
</
title
>


<
meta http

equiv
=

pragma

content
=

no-cache

>


<
meta http

equiv
=

cache-control

content
=

no-cache

>


<
meta http

equiv
=

expires

content
=

0

>


</
head
>


<
body
>

上传成功

<
br
/>


<
s:debug
></
s:debug
>


</
body
>


</
html
>

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/110641.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • unittest测试框架搭建_开源自动化测试框架

    unittest测试框架搭建_开源自动化测试框架本文采用unittest测试框架搭建一个简单的自动化测试实例,完成readmine网站的登录和新建项目用例,并生成测试报告。test_login文件importunittestfromseleniumimportwebdriverclassTestStorm(unittest.TestCase):defsetUp(self):self.driver=webdriver.Chrome()self.driver.get(“http://d

  • QT5编程入门教程(非常详细)「建议收藏」

    QT5编程入门教程(非常详细)「建议收藏」Qt是一个跨平台的C++框架(C++库),目前最新的版本是Qt5。Qt5还包含了很多小版本,其中推荐Qt5.6或Qt5.9,这两个版本是LTS版本(即长期支持版本),Bug较少,相对稳定。Qt除了支持界面设计(GUI编程),还封装了与网络编程、多线程、数据库连接、视频音频等相关的功能。这套Qt教程以Qt5.9为基础来介绍Qt开发,配有精美的图片以及完整的示例程序,几乎涉及Qt编程的所有模块。注意,本教程不再对C++语法进行介绍,没有C++基础的读者…

  • 【mysql 读写分离】10分钟了解读写分离的作用

    【mysql 读写分离】10分钟了解读写分离的作用1、what读写分离读写分离,基本的原理是让主数据库处理事务性增、改、删操作(INSERT、UPDATE、DELETE),而从数据库处理SELECT查询操作。数据库复制被用来把事务性操作导致的变更同步到集群中的从数据库。2、why那么为什么要读写分离呢?因为数据库的“写”(写10000条数据到oracle可能要3分钟)操作是比较耗时的。但是数据库的“读”(从oracle读10

  • ECLIPSE软件安装MyBatis插件 MyBatis Generator

    ECLIPSE软件安装MyBatis插件 MyBatis GeneratorECLIPSE软件安装MyBatis插件打开Eclipse->导航栏Help->EclipseMarketplace会出现如下页面:搜索mybatis->安装我红框框的东西安装就是同意安装,然后install之类的…安装好之后会提示重启Eclipse…

  • Oracle11g_32/64软件百度云下载以及安装教程

    Oracle11g_32/64软件百度云下载以及安装教程解压后的目录点击“软件”后的目录点击32/64位系统后的目录注:文档中有安装教程百度云下载地址链接:https://pan.baidu.com/s/1PmTfXZp-bT6poghP7bNcgA提取码:dr1x复制这段内容后打开百度网盘手机App,操作更方便哦…

  • 汇编工具

    汇编工具【常见的基本汇编书籍】《Windows.环境下32位汇编语言程序设计(第2版)》《汇编语言编程艺术》《Intel汇编语言程序设计(第四版)》《Intel汇编语言程序设计(第五版)范例》《80×86汇编语言程序设计教程》《IBM.PC.汇编语言程序设计(第五版)》《MicrosoftMASM手册》《Intel®64andIA-32Arch…

    2022年10月11日

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号