文件上传(多文件上传)/下载

通常我们会涉及到上传文件和下载文件,在没接struts2框架之前,我们都是使用apache下面的commons子项目的FileUpload组件来进行文件的上传,但是那样做的话,代码看起来比较繁琐,而且不灵活,在学习了struts2后,struts2为文件上传下载提供了更好的实现机制,在这里我分别就文件下载和多文件上传的源代码进行一下讲

文件上传

首先先创建jsp页面(用于多文件上传)

复制代码
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme() + "://"
+ request.getServerName() + ":" + request.getServerPort()
+ path + "/";
%>
<%@ taglib uri="/struts-tags" prefix="s"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">

<title>登录页面</title>

</head>

<body>

<s:form action="upload.action" enctype="multipart/form-data" method="post">

<s:file name="upload" label="选择文件" />
<br />
<s:file name="upload" label="选择文件" />
<br />
<s:file name="upload" label="选择文件" />
<br />
<s:submit name="submit" value="上传文件"></s:submit>
</s:form>

</body>
</html>
复制代码
success.jsp页面(用来显示上传成功后的文件和文件类型)

复制代码
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme() + "://"
+ request.getServerName() + ":" + request.getServerPort()
+ path + "/";
%>
<%@ taglib uri="/struts-tags" prefix="s"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">

<title>成功页面</title>

</head>

<body>
您所上传的文件是:<s:property value="uploadFileName"/><br/>
文件类型:<s:property value="uploadCOntentType"/>


</body>
</html>
复制代码
接下来创建UploadAction类

复制代码
package cn.happy.action;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;

import org.apache.struts2.ServletActionContext;

import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;

public class UploadAction extends ActionSupport {


// 上传文件的属性
private File[] upload;
// 上传文件的类型
private String[] uploadContentType;
// 上传文件的名称
private String[] uploadFileName;
// 上传文件的地址
private String savePath;

@Override
public String execute() throws Exception {
byte[] buffer=new byte[1024];
for (int i = 0; i < upload.length; i++) {

//建立上传文件的输入流
FileInputStream fis=new FileInputStream(getUpload()[i]);
//建立上传文件的输出流, getImageFileName()[i]
FileOutputStream fos=new FileOutputStream(getSavePath()+"\\"+getUploadFileName()[i]);
int length=fis.read(buffer);
while(length>0){
fos.write(buffer,0,length);
length = fis.read(buffer);

}
fis.close();
fos.flush();
fos.close();
}
return SUCCESS;
}



public String getSavePath() {
return ServletActionContext.getServletContext().getRealPath(savePath);
}
public void setSavePath(String savePath) {
this.savePath = savePath;
}

public File[] getUpload() {
return upload;
}
public void setUpload(File[] upload) {
this.upload = upload;
}
public String[] getUploadContentType() {
return uploadContentType;
}
public void setUploadContentType(String[] uploadContentType) {
this.uploadContentType = uploadContentType;
}
public String[] getUploadFileName() {
return uploadFileName;
}
public void setUploadFileName(String[] uploadFileName) {
this.uploadFileName = uploadFileName;
}




}
复制代码
最后编写配置文件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.devMode" value="false" />


<package name="default" namespace="/" extends="struts-default">

<action name="upload" class="cn.happy.action.UploadAction" method="execute">
<param name="savePath">/image</param>
<result name="success">/upload/success.jsp</result>
</action>
</package>
</struts>
复制代码
实现效果展示

 

 

选择文件后

 

 

文件下载

编写jsp页面

复制代码
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">

<title>My JSP 'index.jsp' starting page</title>
</head>

<body>
<a href="download.action?fileName=1.jpg">点击此处下载文档</a>
</body>
</html>
复制代码
创建FileDownAction类

复制代码
package action;

import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;

import org.apache.struts2.ServletActionContext;

import com.opensymphony.xwork2.ActionSupport;

public class FileDownAction extends ActionSupport {
//读取下载文件的目录
private String inputPath;
//下载的文件名
private String FileName;
//读取下载文件的输入流
private InputStream inputStream;
//下载文件的类型
private String conetntType;

//创建InputStream输入流
public InputStream getInputStream() throws IOException {
System.out.println("123");
String path=ServletActionContext.getServletContext().getRealPath(inputPath);
return new BufferedInputStream(new FileInputStream(path+"\\"+FileName));
}

@Override
public String execute() throws Exception{
return SUCCESS;
}


public String getInputPath() {
return inputPath;
}
public String getFileName() {
return FileName;
}
public String getConetntType() {
return conetntType;
}
public void setInputPath(String inputPath) {
this.inputPath = inputPath;
}
public void setFileName(String fileName) {
FileName = fileName;
}
public void setInputStream(InputStream inputStream) {
this.inputStream = inputStream;
}
public void setConetntType(String conetntType) {
this.conetntType = conetntType;
}
}
复制代码
编写配置文件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.devMode" value="true"></constant>
<package name="default" namespace="/" extends="struts-default">
<action name="download" class="action.FileDownAction">
<param name="inputPath">/image</param>
<result name="success" type="stream">
<param name="contentType">application/octet-stream</param>
<param name="inputName">inputStream</param>
<param name="contentDisposition">attachment;Filename="${FileName}"</param>
<param name="bufferSize">4096</param>
</result>
</action>
</package>


</struts>
复制代码
最后在webRoot目录下创建image文件里面保存下载用到的文件

 

 

实现效果

 

 

点击文件下载

 

 

附加

导入jar包

 

 

web.xml配置

复制代码
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<display-name></display-name>

<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>


<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>
复制代码

posted @ 2016-10-14 17:14  吴玄坤  阅读(282)  评论(0编辑  收藏  举报