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
>

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

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

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 微信小程序定位权限怎么打开_怎么用微信定位朋友的位置

    微信小程序定位权限怎么打开_怎么用微信定位朋友的位置最近有客户提了一个需求,要求登陆考试系统的测评者记录下当时的位置。web形式的虽然可以通过IP来定位,但是IP太容易作假了,所以为了比较高的准确性,最后决定用微信小程序,虽然也有作假的可能,但比web形式要好一些。一、准备工作既然要定位,那么肯定需要找到跟地图相关的功能API,查找微信开发文档,因为我们这里只是需要记录地位功能,不需要打开地图,所以只使用wx.getLocatio…

    2022年10月23日
    0
  • Jenkins(5)生成allure报告

    Jenkins(5)生成allure报告前言jenkins集成了allure插件,安装插件后运行pytest+allure的脚本即可在jenkins上查看allure报告了。allure安装在运行代码的服务器本机,我这里是用的dock

    2022年7月28日
    0
  • 如何制作一个简单的网页(二)_简单的个人网页

    如何制作一个简单的网页(二)_简单的个人网页使用HTML和CSS来制作一个简单的网页前言一、HTML1.1常见元素介绍1.2借助工具,浏览器开发者工具二、实现个人名片1.基本框架2.使用CSS美化1.CSS书写位置1、以元素的style属性来指定(内联样式)2、以style标签包裹(内部样式)3、以外部文件的方式 (外部样式)2.CSS中的选择器1.标签选择器2.id选择器3.类选择器4.子元素选择器前言HTML负责描述了网页的整体骨架CSS负责描述了页面样式利用其完成一个简单的个人建立网页。一、HTMLHTML不是

    2022年10月10日
    0
  • android 图片浏览器 demo

    android 图片浏览器 demo

    2022年1月18日
    36
  • 硬件基础知识(6)—电容分类[通俗易懂]

    硬件基础知识(6)—电容分类[通俗易懂]智能硬件和物联网产品上,工作电压不高,其常用的电容根据不同的工艺,主要分为陶瓷电容、电解电容和钽电容。↑陶瓷电容的结构图↑电解电容的结构图不管是什么电容,都是两组金属片夹着一层介质。陶瓷电容把金属片交错摆放,电解电容把金属片卷成柱状。↑片状陶瓷电容↑贴片陶瓷电容陶瓷电容,MultilayerCeramicCapacitor(MLCC),陶瓷电容的电介质是陶瓷,所以叫做陶瓷电容。陶瓷电容容值小、…

    2022年8月22日
    3
  • 数据库:MySQL 修改密码

    数据库:MySQL 修改密码1.改动数据库配置表编辑/etc/my.cnf,在配置表后方加入“skip-grant-tables”,意思是跳过跳过授权表,即不再坚定账号密码的正确性,使用servicemysqldrestart重启mysql,输入mysql-uroot-p,直接回车进入数据库命令行。2.更改密码MySQL5.7之前的版本修改密码使用的语句是:UPDATEuserSETPassword=PASSWORD(‘yourpassword’)whereUSER=’root’;5.7之

    2022年7月16日
    16

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

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