Struts2上传文件Word文档格式.docx

上传人:b****6 文档编号:20915925 上传时间:2023-01-26 格式:DOCX 页数:8 大小:20.29KB
下载 相关 举报
Struts2上传文件Word文档格式.docx_第1页
第1页 / 共8页
Struts2上传文件Word文档格式.docx_第2页
第2页 / 共8页
Struts2上传文件Word文档格式.docx_第3页
第3页 / 共8页
Struts2上传文件Word文档格式.docx_第4页
第4页 / 共8页
Struts2上传文件Word文档格式.docx_第5页
第5页 / 共8页
点击查看更多>>
下载资源
资源描述

Struts2上传文件Word文档格式.docx

《Struts2上传文件Word文档格式.docx》由会员分享,可在线阅读,更多相关《Struts2上传文件Word文档格式.docx(8页珍藏版)》请在冰豆网上搜索。

Struts2上传文件Word文档格式.docx

>

htmlxmlns="

//www.w3.org/1999/xhtml"

head>

 

<

title>

Struts2FileUpload<

/title>

/head>

body>

s:

formaction="

fileUpload"

method="

POST"

enctype="

multipart/form-data"

filename="

myFile"

label="

ImageFile"

/>

textfieldname="

caption"

Caption"

submit/>

/s:

form>

/body>

/html>

清单2FileUpload.jsp

在FileUpload.jsp中,先将表单的提交方式设为POST,然后将enctype设为multipart/form-data,这并没有什么特别之处。

接下来,<

s:

file/>

标志将文件上传控件绑定到Action的myFile属性。

其次是FileUploadAction.java代码:

packagetutorial;

importjava.io.BufferedInputStream;

importjava.io.BufferedOutputStream;

importjava.io.File;

importjava.io.FileInputStream;

importjava.io.FileOutputStream;

importjava.io.InputStream;

importjava.io.OutputStream;

importjava.util.Date;

importorg.apache.struts2.ServletActionContext;

importcom.opensymphony.xwork2.ActionSupport;

publicclassFileUploadActionextendsActionSupport{

privatestaticfinallongserialVersionUID=572146812454l;

privatestaticfinalintBUFFER_SIZE=16*1024;

privateFilemyFile;

privateStringcontentType;

privateStringfileName;

privateStringimageFileName;

privateStringcaption;

publicvoidsetMyFileContentType(StringcontentType){

this.contentType=contentType;

}

publicvoidsetMyFileFileName(StringfileName){

this.fileName=fileName;

publicvoidsetMyFile(FilemyFile){

this.myFile=myFile;

publicStringgetImageFileName(){

returnimageFileName;

publicStringgetCaption(){

returncaption;

publicvoidsetCaption(Stringcaption){

this.caption=caption;

privatestaticvoidcopy(Filesrc,Filedst){

try{

InputStreamin=null;

OutputStreamout=null;

try{ 

in=newBufferedInputStream(newFileInputStream(src),BUFFER_SIZE);

out=newBufferedOutputStream(newFileOutputStream(dst),BUFFER_SIZE);

byte[]buffer=newbyte[BUFFER_SIZE];

while(in.read(buffer)>

0){

out.write(buffer);

}finally{

if(null!

=in){

in.close();

=out){

out.close();

}catch(Exceptione){

e.printStackTrace();

privatestaticStringgetExtention(StringfileName){

intpos=fileName.lastIndexOf("

."

);

returnfileName.substring(pos);

@Override

publicStringexecute() 

imageFileName=newDate().getTime()+getExtention(fileName);

FileimageFile=newFile(ServletActionContext.getServletContext().getRealPath("

/UploadImages"

)+"

/"

+imageFileName);

copy(myFile,imageFile);

returnSUCCESS;

清单3tutorial/FileUploadAction.java

在FileUploadAction中我分别写了setMyFileContentType、setMyFileFileName、setMyFile和setCaption四个Setter方法,后两者很容易明白,分别对应FileUpload.jsp中的<

和<

textfield/>

标志。

但是前两者并没有显式地与任何的页面标志绑定,那么它们的值又是从何而来的呢?

其实,<

标志不仅仅是绑定到myFile,还有myFileContentType(上传文件的MIME类型)和myFileFileName(上传文件的文件名,该文件名不包括文件的路径)。

因此,<

filename="

xxx"

对应Action类里面的xxx、xxxContentType和xxxFileName三个属性。

FileUploadAction作用是将浏览器上传的文件拷贝到WEB应用程序的UploadImages文件夹下,新文件的名称是由系统时间与上传文件的后缀组成,该名称将被赋给imageFileName属性,以便上传成功的跳转页面使用。

下面我们就来看看上传成功的页面:

divstyle="

padding:

3px;

border:

solid1px#cccccc;

text-align:

center"

imgsrc='

UploadImages/<

propertyvalue="

imageFileName"

'

br/>

/div>

清单4ShowUpload.jsp

ShowUpload.jsp获得imageFileName,将其UploadImages组成URL,从而将上传的图像显示出来。

然后是Action的配置文件:

?

xmlversion="

1.0"

encoding="

UTF-8"

?

>

DOCTYPEstrutsPUBLIC

-//ApacheSoftwareFoundation//DTDStrutsConfiguration2.0//EN"

//struts.apache.org/dtds/struts-2.0.dtd"

struts>

packagename="

fileUploadDemo"

extends="

struts-default"

actionname="

class="

tutorial.FileUploadAction"

interceptor-refname="

fileUploadStack"

resultname="

success"

/ShowUpload.jsp<

/result>

/action>

/package>

/struts>

清单5struts.xml

fileUploadAction显式地应用fileUploadStack的拦截器。

最后是web.xml配置文件:

web-appid="

WebApp_9"

version="

2.4"

xmlns="

xmlns:

xsi="

//www.w3.org/2001/XMLSchema-instance"

xsi:

schemaLocation="

>

display-name>

Struts2Fileupload<

/display-name>

filter>

filter-name>

struts-cleanup<

/filter-name>

filter-class>

org.apache.struts2.dispatcher.ActionContextCleanUp

/filter-class>

/filter>

struts2<

org.apache.struts2.dispatcher.FilterDispatcher

filter-mapping>

url-pattern>

/*<

/url-pattern>

/filter-mapping>

welcome-file-list>

welcome-file>

index.html<

/welcome-file>

/welcome-file-list>

/web-app>

清单6WEB-INF/web.xml

发布运行应用程序,在浏览器地址栏中键入:

//localhost:

8080/Struts2_Fileupload/FileUpload.jsp,出现图示页面:

清单7FileUpload页面

选择图片文件,填写Caption并按下Submit按钮提交,出现图示页面:

清单8上传成功页面

更多配置

在运行上述例子,如果您留心一点的话,应该会发现服务器控制台有如下输出:

Mar20,20074:

08:

43PMorg.apache.struts2.dispatcher.DispatchergetSaveDir

INFO:

Unabletofind'

struts.multipart.saveDir'

propertysetting.Defaultingtojavax.servlet.context.tempdir

43PMorg.apache.struts2.interceptor.FileUploadInterceptorintercept

RemovingfilemyFileC:

\ProgramFiles\Tomcat5.5\work\Catalina\localhost\Struts2_Fileupload\upload_251447c2_1116e355841__7ff7_00000006.tmp

清单9服务器控制台输出

上述信息告诉我们,struts.multipart.saveDir没有配置。

struts.multipart.saveDir用于指定存放临时文件的文件夹,该配置写在struts.properties文件中。

例如,如果在struts.properties文件加入如下代码:

struts.multipart.saveDir=/tmp

清单10struts配置

这样上传的文件就会临时保存到你根目录下的tmp文件夹中(一般为c:

\tmp),如果此文件夹不存在,Struts2会自动创建一个。

错误处理

上述例子实现的图片上传的功能,所以应该阻止用户上传非图片类型的文件。

在Struts2中如何实现这点呢?

其实这也很简单,对上述例子作如下修改即可。

首先修改FileUpload.jsp,在<

body>

与<

form>

之间加入“<

fielderror/>

”,用于在页面上输出错误信息。

然后修改struts.xml文件,将ActionfileUpload的定义改为如下所示:

paramname="

allowedTypes"

image/bmp,image/png,image/gif,image/jpeg

/param>

/interceptor-ref>

defaultStack"

input"

/FileUpload.jsp<

清单11修改后的配置文件

显而易见,起作用就是fileUpload拦截器的allowTypes参数。

另外,配置还引入defaultStack它会帮我们添加验证等功能,所以在出错之后会跳转到名称为“input”的结果,也即是FileUpload.jsp。

发布运行应用程序,出错时,页面如下图所示:

清单12出错提示页面

上面的出错提示是Struts2默认的,大多数情况下,我们都需要自定义和国际化这些信息。

通过在全局的国际资源文件中加入“struts.messages.error.content.type.not.allowed=Thefileyouuploadedisnotaimage”,可以实现以上提及的需求。

对此有疑问的朋友可以参考我之前的文章《在Struts2.0中国际化(i18n)您的应用程序》。

实现之后的出错页面如下图所示:

清单13自定义出错提示页面

同样的做法,你可以使用参数“maximumSize”来限制上传文件的大小,它对应的字符资源名为:

“struts.messages.error.file.too.large”。

字符资源“struts.messages.error.uploading”用提示一般的上传出错信息。

多文件上传

与单文件上传相似,Struts2实现多文件上传也很简单。

你可以将多个<

file/>

绑定Action的数组或列表。

如下例所示。

doMultipleUploadUsingList"

filelabel="

File

(1)"

name="

upload"

File

(2)"

FIle(3)"

清单14多文件上传JSP代码片段

如果你希望绑定到数组,Action的代码应类似:

privateFile[]uploads;

privateString[]uploadFileNames;

privateString[]uploadContentTypes;

publicFile[]getUpload(){returnthis.uploads;

}

publicvoidsetUpload(File[]upload){this.uploads=upload;

publicString[]getUploadFileName(){returnthis.uploadFileNames;

publicvoidsetUploadFileName(String[]uploadFileName){this.uploadFileNames=uploadFileName;

publicString[]getUploadContentType(){returnthis.uploadContentTypes

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > PPT模板 > 自然景观

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1