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

Struts2--文件上传与下载

2017-07-05 02:25 417 查看
1 文件上传

页面:

<body>
<!--        必须是post的方式 -->
<form action="upload.action" method="post" enctype="multipart/form-data">
文件:<input type="file" name="file"/>
<input type="submit" value="上传"/>
</form>
</body>


请求处理类:

public class UploadAction extends ActionSupport {

//对应JSP页面中的name="file"
private File file;
//文件名,必须加
private String fileFileName;
//文件的类型,必须加
private String fileContentType;

private InputStream is;
private OutputStream os;
public String upload() throws IOException{
HttpServletRequest request=ServletActionContext.getRequest();
String path=request.getRealPath("/upload");//获取项目目录下的upload目录的路径
try {
is=new FileInputStream(file);
os=new FileOutputStream(new File(path,fileFileName));//创建目录和创建文件
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
byte[] buffer=new byte[200];
int len=0;
while((len=is.read(buffer))!=-1){
os.write(buffer, 0, len);
}
os.close();
is.close();
return Action.SUCCESS;
}

public File getFile() {
return file;
}
public void setFile(File file) {
this.file = file;
}
public String getFileFileName() {
return fileFileName;
}
public void setFileFileName(String fileFileName) {
this.fileFileName = fileFileName;
}
public String getFileContentType() {
return fileContentType;
}
public void setFileContentType(String fileContentType) {
this.fileContentType = fileContentType;
}
}
页面中的name属性设置的值与类中的属性名称一一对应。
request.getRealPath("/upload");//获取项目目录下的upload目录的路径,将上传的文件放在该upload中。


struts.xml配置:

<struts>
<!--    设置临时目录 -->
<constant name="struts.multipart.saveDir" value="E:/Docum"></constant>
<!--    设置上传文件的最大大小必须大于等于maximumSize -->
<constant name="struts.multipart.maxSize" value="20971520"></constant>

<package name="default" extends="struts-default" namespace="/">
<action name="upload" class="cn.sxt.action.UploadAction" method="upload">
<result>/index.jsp</result>
<!-- 拦截器 -->
<interceptor-ref name="fileUpload">
<!-- 设置文件最大值 -->
<param name="maximumSize">20971520</param>
</interceptor-ref>
<interceptor-ref name="defaultStack"/>
</action>
</package>
</struts>


多个文件上传即为File数组。

页面:

<link rel="stylesheet" type="text/css" href="styles.css">
<script type="text/javascript" src="js/jquery-3.0.0.min.js"></script>
<script type="text/javascript">
$(function(){
$('#btn').click(function(){
var field="<p><input type='file' name='file'/><input type='button' value='删除' onclick='removed(this);'/></p>"
$('#files').append(field);
});
});
function removed(o){

$(o).parent().remove();
}

</script>
</head>
<body>
<!--        必须是post的方式 -->
<form action="upload.action" method="post" enctype="multipart/form-data">
文件:<input type="file" name="file"/><input type="button" id="btn" value="添加">
<div id="files"></div>
<input type="submit" value="上传"/>
</form>
</body>


请求处理类:

package cn.sxt.action;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import javax.servlet.http.HttpServletRequest;
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.Action;
public class BatchUploadAction {
private File[] file;
private String[] fileFileName;
private String[] fileContentType;
public String execute() throws IOException {
HttpServletRequest request = ServletActionContext.getRequest();
String path = request.getRealPath("/upload");
for (int i = 0; i < file.length; i++) {
InputStream is = new FileInputStream(file[i]);
OutputStream os = new FileOutputStream(new File(path, fileFileName[i]));

byte[] buffer = new byte[200];
int len = 0;
while ((len = is.read(buffer)) != -1) {
os.write(buffer, 0, len);
}
os.close();
is.close();
}
return Action.SUCCESS;
}
public File[] getFile() {
return file;
}
public void setFile(File[] file) {
this.file = file;
}

public String[] getFileFileName() {
return fileFileName;
}
public void setFileFileName(String[] fileFileName) {
this.fileFileName = fileFileName;
}
public String[] getFileContentType() {
return fileContentType;
}
public void setFileContentType(String[] fileContentType) {
this.fileContentType = fileContentType;
}
}


struts.xml配置:

<action name="batch" class="cn.sxt.action.BatchUploadAction">
<result>/index.jsp</result>
<interceptor-ref name="fileUpload">
<param name="maximumSize">20971520</param>
</interceptor-ref>
<interceptor-ref name="defaultStack"/>
</action>


2 文件的下载:

2.1 获取response,通过输入输出来下载文件。

请求处理器

public class DownloadAction {

public String execute() throws IOException{
HttpServletRequest req=ServletActionContext.getRequest();
HttpServletResponse resp=ServletActionContext.getResponse();
//获取路径
String path=req.getRealPath("/download");
File file=new File(path,"dema1.txt");
resp.setContentLength((int)file.length());
resp.setCharacterEncoding("utf-8");
resp.setContentType("application/octet-stream");
resp.setHeader("Content-Disposition","attachment;filename='dema1.txt'");
byte[] buffer=new byte[400];
int len;
InputStream is=new FileInputStream(file);
OutputStream os=resp.getOutputStream();
while((len=is.read(buffer))!=-1){
os.write(buffer, 0, len);
}
os.close();
is.close();
return null;
}
}


配置信息

<!--        当action处理的方法返回空是不用配置结果集 -->
<action name="download" class="cn.sxt.action.DownloadAction">
</action>


2.2 未知的方式。

请求处理类

public class StreamDownloadAction {
private String fileName;
public String execute(){
return Action.SUCCESS;
}
public InputStream getInputStream() throws IOException{

be74
HttpServletRequest req=ServletActionContext.getRequest();
//获取路径
String path=req.getRealPath("/download");
return new FileInputStream(new File(path,fileName));
}
public String getFileName() {
return fileName;
}
public void setFileName(String fileName) {
this.fileName = fileName;
}
}


配置信息

<action name="streamDownload" class="cn.sxt.action.StreamDownloadAction">
<result type="stream">
<param name="inputName">inputStream</param>
<param name="contentDisposition">attachment;filename=${fileName}</param>
</result>
</action>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: