struts文件上传与下载简单DEMO

首先创建一个简单的project,配置其中的web.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
  <display-name>applicationProject</display-name>
 <filter>  
        <!-- 配置Struts2核心Filter的名字 -->  
        <filter-name>struts2</filter-name>  
        <!-- 配置Struts2核心Filter的实现类 -->  
        <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>  
    </filter>  
    <!-- 配置Filter拦截的URL -->  
    <filter-mapping>  
        <!-- 配置Struts2的核心FilterDispatcher拦截所有用户请求 -->  
        <filter-name>struts2</filter-name>  
        <url-pattern>*.action</url-pattern>  
    </filter-mapping>  
 
  <welcome-file-list>
    <welcome-file>/index.jsp</welcome-file>
  </welcome-file-list>
</web-app>

index.jsp页面信息:

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<%@ page language="java" contentType="text/html;" pageEncoding="utf-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<title>文件上传</title>
</head>
<script type="text/javascript">
	function checkf() {
		var files = document.getElementsByName("file");
		if (files[0].value.length != 0) {
			return true;
		} else {
			alert("请选择文件");
			return false;
		}
	}
	function addMore() {
		var td = document.getElementById("more");
		var br = document.createElement("br");
		var input = document.createElement("input");
		var button = document.createElement("input");
		input.type = "file";
		input.name = "file";
		button.type = "button";
		button.value = "Remove";
		button.onclick = function() {
			td.removeChild(br);
			td.removeChild(input);
			td.removeChild(button);
		}
		td.appendChild(br);
		td.appendChild(input);
		td.appendChild(button);
	}
</script>
<body>
	<form action="upload.action" method="post"  enctype="multipart/form-data">
		<table align="center" width="50%" border="1">
			<tr>
				<td>选择上传文件</td>
				<td id="more">
				  <input type="file" id="file" name="file"> 
				  <input type="button" value="Add More.." οnclick="addMore();">
				</td>
			</tr>
			<tr>
				<td><input type="submit" value="submit" οnclick="return checkf();" /></td>
			</tr>
		</table>
		<div>${fileTypeError}</div>
	</form>
</body>
</html>

success.jsp页面信息:

<pre name="code" class="html"><%@ page language="java" contentType="text/html;" pageEncoding="utf-8"%>
<%@ taglib uri="/struts-tags" prefix="s"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>文件下载</title>
</head>
<body>
<s:form>
    <div style="border:1px solid black">成功上传的文件:<br>
        <ul style="list-style-type:decimal">
		   <c:forEach items="${fileNames}" var="viewFile" varStatus="ind" >
		                        下载文件${ind.index+1}: <a href="download.action?filename=${viewFile}">${viewFile}</a></br>
		   </c:forEach>
        </ul>
    </div>
</s:form>
</body>
</html>



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.i18n.encoding" value="utf-8"></constant>
	<constant name="struts.multipart.saveDir" value="/upload"></constant>
	<package name="struts2" namespace="/" extends="struts-default">

		<action name="upload" class="com.huaxun.system.UpDownloadAction" method="upLoadFile">
			 <result name="input">/index.jsp</result>
			 <result name="success">/success.jsp</result>
		     <param name="maximumSize">409600</param>
		     <param name="savePath">/upload</param>
		     <param name="allowTypes">text/plain,text/xml,text/html,image/gif,image/png,image/jpeg,image/jpg,image/bmp</param>
		     <interceptor-ref name="defaultStack"></interceptor-ref>
		</action>

		<action name="download" class="com.huaxun.system.UpDownloadAction" method="downLoadFile">
			  <param name="savePath">/upload</param>  
			  <result name="success">success.jsp</result>  
			  <result name="input">/index.jsp</result>
			  <interceptor-ref name="defaultStack"></interceptor-ref>
		</action>
		
		
	</package>
</struts>

UpDownloadAction.java类信息:

package com.huaxun.system;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.Arrays;
import java.util.List;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.struts2.ServletActionContext;

import com.opensymphony.xwork2.ActionSupport;

public class UpDownloadAction extends ActionSupport {

	private static final long serialVersionUID = 1L;
	private List<File> file;//这里的文件域名  一定要和表单中的file名相同
	private List<String> fileFileName;//格式和“file”+FileName
	private List<String> fileContentType;//上传文件  内容类型 file +"ContentType"
	private String savePath;//上传文件保存的路径
	private String allowTypes;//允许上传文件的类型
	private HttpServletRequest request = ServletActionContext.getRequest();
	
	public String upLoadFile() throws Exception {
		List<String> typeList = getFileContentType();
		String[] allowTs = getAllowTypes().split(",");
		List<String> list =Arrays.asList(allowTs);
		boolean result = true;//先判断上传的文件 是否为允许上传的文件类型
		for (String type : typeList) {
			if(!list.contains(type)){
				result = false;
				break;
			}
		}
		//不允许
		if(!result){
			request.setAttribute("fileTypeError", "允许上传的文件类型为:"+ getAllowTypes());
			return INPUT;
		}
		//允许上传
		InputStream is = null;//读取文件
		OutputStream os = null;//写入文件
		File desFile = new File(getSavePath());
		if(desFile.mkdir()){
			desFile.mkdir();
		}
		for (int i = 0; i < file.size(); i++) {
			is = new FileInputStream(file.get(i));
			os = new FileOutputStream(getSavePath()+"//"+this.getFileFileName().get(i));
			byte[] buffer = new byte[1024];
			int length = 0;
			try{
				while ((length = is.read(buffer)) > 0) {
					os.write(buffer, 0, length);
				}
			}finally{
				if(null != is){
					is.close();
				}
				if(null != os){
					os.close();
				}
			}
		}
		request.setAttribute("fileNames", fileFileName);
		return SUCCESS;
	}

	
	public String downLoadFile() throws IOException{
		String fileNameStr = request.getParameter("filename");
		String fullName= getSavePath()+"\\"+fileNameStr;
		InputStream inputStream = new FileInputStream(fullName);
		 HttpServletResponse  response = ServletActionContext.getResponse();
		 OutputStream out = response.getOutputStream();
		 response.setCharacterEncoding("utf-8");
		 response.setHeader("Content-Disposition", "attachment;fileName=\"" + new String( fileNameStr.getBytes("gb2312"), "ISO8859-1" ) +"\"");
		int leng = 0;
		byte[] buffer = new byte[1024];
		while((leng = inputStream.read(buffer, 0, buffer.length)) != -1){
			out.write(buffer, 0, leng);
		}
		if(null != out){
			out.close();
		}
		if(null != inputStream){
			inputStream.close();
		}
		return null;
	}


	/**
	 * @return the file
	 */
	public List<File> getFile() {
		return file;
	}


	/**
	 * @param file the file to set
	 */
	public void setFile(List<File> file) {
		this.file = file;
	}


	/**
	 * @return the fileFileName
	 */
	public List<String> getFileFileName() {
		return fileFileName;
	}


	/**
	 * @param fileFileName the fileFileName to set
	 */
	public void setFileFileName(List<String> fileFileName) {
		this.fileFileName = fileFileName;
	}


	/**
	 * @return the fileNameContentType
	 */
	public List<String> getFileContentType() {
		return fileContentType;
	}


	/**
	 * @param fileNameContentType the fileNameContentType to set
	 */
	public void setFileContentType(List<String> fileContentType) {
		this.fileContentType = fileContentType;
	}


	/**
	 * @return the savePath
	 */
	public String getSavePath() {//获取绝对路径
		return ServletActionContext.getServletContext().getRealPath(savePath);
	}


	/**
	 * @param savePath the savePath to set
	 */
	public void setSavePath(String savePath) {
		this.savePath = savePath;
	}


	/**
	 * @return the allowType
	 */
	public String getAllowTypes() {
		return allowTypes;
	}


	/**
	 * @param allowType the allowType to set
	 */
	public void setAllowTypes(String allowTypes) {
		this.allowTypes = allowTypes;
	}
	
	
	
	
	
	
}

 效果图:



 


  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值