您的位置:首页 > 编程语言 > Java开发

Struts2文件上传和下载

2016-09-12 15:14 399 查看

Struts2文件上传和下载

文件上传

文件上传需要用到
<s:file>
标签,该标签是一个表单标签,要放在
<s:form>
标签中。

<s:form>
enctype
属性要指定为
multipart/form-data
method
一般指定为
post


如下,上传页面:

<s:form action="fileUpload.action" enctype="multipart/form-data" method="post">
<s:file name="uploadFile" label="选择文件"></s:file>
<s:submit></s:submit>
</s:form>


文件上传Action类

一般需要包含3个类型的属性:

File类型的属性,指定上传文件的内容,假设该属性为XXX

String类型的属性,该属性名称必须为XXXFileName,其中XXX为File类型的属性名称,指定上传文件名

String类型的属性,改属性名称必须为XXXContentType,指定上传文件的文件类型。

如下的
FileUploadAction


package action;

import java.io.File;

import com.opensymphony.xwork2.ActionSupport;

public class FileUploadAction extends ActionSupport{

private static final long serialVersionUID = 1L;

//上传文件
private File uploadFile;
//上传文件的文件名
private String uploadFileFileName;
//上传文件的类型
private String uploadFileContentType;

public File getUploadFile() {
return uploadFile;
}
public void setUploadFile(File uploadFile) {
this.uploadFile = uploadFile;
}
public String getUploadFileFileName() {
return uploadFileFileName;
}
public void setUploadFileFileName(String uploadFileFileName) {
this.uploadFileFileName = uploadFileFileName;
}
public String getUploadFileContentType() {
return uploadFileContentType;
}
public void setUploadFileContentType(String uploadFileContentType) {
this.uploadFileContentType = uploadFileContentType;
}

@Override
public String execute() throws Exception {
if (uploadFile != null) {
//上传文件存放的目录
String dataDir = "/Users/Miller/Pictures/upload";
//上传文件具体在服务器的位置
File savedFile = new File(dataDir, uploadFileFileName);
//将上传文件从临时文件复制到指定文件
uploadFile.renameTo(savedFile);
}else{
return INPUT;
}
return SUCCESS;
}

}


文件上传Action的配置

在文件上传的Action中可以添加一个
<param>
标签,该标签配置了文件上传后所在的路径,其
name
属性和
Action
类中的路径属性相对应。

还可以在
struts.xml
中配置Action的拦截器,该拦截器在
struts-default
中配置过,但使用时可以重新配置,其名称为
fileUpload
。一般会指定两个参数:
allowedTypesSet
maximumSize
allowedTypesSet
参数指定运行上传的文件类型,多个文件类型之间用逗号隔开;
maximumSize
参数指定允许上传的文件大小,单位是字节。

如下的
struts.xml
配置:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">

<struts>

<constant name="struts.enable.DynamicMethodInvocation" value="false" />
<constant name="struts.devMode" value="true" />

<package name="defautl" namespace="/" extends="struts-default">
<!-- 定义文件上传Action -->
<action name="fileUpload" class="action.FileUploadAction">
<result>/success.jsp</result>
<result name="input">/index.jsp</result>
<interceptor-ref name="defaultStack">
<!-- 设置文件大小 -->
<param name="fileUpload.maximumSize">100000000</param>
<!-- 设置文件类型 -->
<param name="fileUpload.allowedTypesSet">image/jpg,image/jpeg,image/png</param>
</interceptor-ref>
</action>

</package>

</struts>


文件下载

请参考Struts2下载文件实例

Action

在Action类中,声明一个 InputStream 的数据类型和getter方法。

DownloadAction.java

package com.gitbook.netmon.action;

import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import com.opensymphony.xwork2.ActionSupport;

public class DownloadAction extends ActionSupport{

private InputStream fileInputStream;

public InputStream getFileInputStream() {
return fileInputStream;
}

public String execute() throws Exception {
fileInputStream = new FileInputStream(new File("C:\\file-for-download.txt")); return SUCCESS;
}
}


视图文件

一个正常的页面,有一个下载链接,用于下载文件。

downloadPage.jsp

<%@ taglib prefix="s" uri="/struts-tags" %>
<html>

<body>
<h1>Struts 2 download file example</h1>

<s:url id="fileDownload" namespace="/" action="download" ></s:url>

<div><div class="ads-in-post hide_if_width_less_800">
<script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
<!-- 728x90 - After2ndH4 -->
<ins class="adsbygoogle hide_if_width_less_800"
style="display:inline-block;width:728px;height:90px"
data-ad-client="ca-pub-2836379775501347"
data-ad-slot="3642936086"
data-ad-region="yiibairegion"></ins>
<script>
(adsbygoogle = window.adsbygoogle || []).push({});
</script>
</div></div><h2>Download file - <s:a href="%{fileDownload}">fileABC.txt</s:a>
</h2>

</body>
</html>


struts.xml

定义下载文件的细节。
<param name=”inputName”>
值是从Action的InputStream属性的名称。

阅读Struts2的数据流结果文档以了解更详细信息。

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>

<constant name="struts.devMode" value="true" />

<package name="default" namespace="/" extends="struts-default">
<action name="show">
<result name="success">pages/downloadPage.jsp</result>
</action>

<action name="download" class="com.gitbook.netmon.action.DownloadAction">
<result name="success" type="stream">
<param name="contentType">application/octet-stream</param>
<param name="inputName">fileInputStream</param>
<param name="contentDisposition">attachment;filename="file-for-download.txt"</param> <param name="bufferSize">1024</param>
</result>
</action>
</package>

</struts>


参考

Struts 2中实现文件下载(修正中文问题)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  struts2.0