struts2实现文件上传下载

文件上传视图 :

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!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>
	<form action="upload.action" method="post" enctype="multipart/form-data">
		文件:<input type="file" name="logo"/>
		<input type="submit" value="提交">
	</form>
	
	文件下载: ${logoFileName }</a><br>
    <a>文件大小:${fileSize }</a><br>
    <a>文件上传时间:${uploadDate }</a><br>
    
    <a href="download?logoFileName=${downFileName } ">查看</a>
	
</body>
</html>

首先,表单的enctype设置为multipart/form-data,要使得文件上传拦截器成功处理文件上传,这个就必须设置。然后要注意的是表单的action方法上传和文件上传字段的名称(即logoFileName )。我们需要这些信息来创建action方法和struts配置。

文件下载视图:

<%@ 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>文件下载</title>
    

  </head>
  
  <body>
    文件下载:<a href="download?logoFileName=${downFileName }">${logoFileName }</a><br>
    <a>文件大小:${fileSize }KB</a><br>
    <a>文件上传时间:${uploadDate }</a>
  </body>
</html>

创建Action类:


import java.io.File;



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


import java.io.InputStream;
import java.sql.Timestamp;
import java.text.SimpleDateFormat;
import java.util.Date;

import org.apache.commons.io.FileUtils;
import org.apache.struts2.ServletActionContext;

import com.opensymphony.xwork2.ActionSupport;

//上传和下载文件

public class UploadAction extends ActionSupport{
	private File logo;
	private String logoFileName;
	private String logoContentType;
	private String fileSize;
	private String uploadDate;
	
	public void setFileSize(String fileSize) {
		this.fileSize = fileSize;
	}
	
	public String getFileSize() {
		return fileSize;
	}
	
	public void setUploadDate(String uploadDate) {
		this.uploadDate = uploadDate;
	}
	
	public String getUploadDate() {
		return uploadDate;
	}
	
	private static String downFileName;
	
	public  String getDownFileName() {
		return downFileName;
	}

	public  void setDownFileName(String downFileName) {
		this.downFileName = downFileName;
	}

	//上传文件
	public String uploadFile(){
		 //String path=ServletActionContext.getRequest().getRealPath("/upload");
		 String path="E:/upload";
		 
		 SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//设置日期格式
		 uploadDate = df.format(new Date());
		 System.out.println(uploadDate);// new Date()为获取当前系统时间
	
		 fileSize = (logo.length()/1024+1)+"KB";
		 System.out.println("文件大小:"+fileSize);
		 System.out.println(logoFileName);
		 downFileName=logoFileName;
		 System.out.println(downFileName);
		 try {
			FileUtils.copyFile(logo, new File(path,logoFileName));
		} catch (IOException e) {
			e.printStackTrace();
		}
		return "success";
	}
	
	//ָ指定下载路径
	public InputStream getInputStream() throws FileNotFoundException{
		String path="E:/upload";
		System.out.println(path+"/"+downFileName);
		return new FileInputStream(path+"/"+downFileName);
	}
	
	public String downloadFile(){
		return "success";
	}
	
	public File getLogo() {
		return logo;
	}
	public void setLogo(File logo) {
		this.logo = logo;
	}
	public String getLogoFileName() {
		return logoFileName;
	}
	public void setLogoFileName(String logoFileName) {
		this.logoFileName = logoFileName;
	}
	public String getLogoContentType() {
		return logoContentType;
	}
	public void setLogoContentType(String logoContentType) {
		this.logoContentType = logoContentType;
	}

}

默认情况下,FileUpload拦截器为你提供三个参数,它们分别按以下方式命名:


 1. [文件名参数] - 这是用户已上传的实际文件。在这个例子中它将是“logoFile”
 2. [文件名参数]ContentType - 这是上传的文件的内容类型。在这个例子中,它将是“logoContentType”
 3. [文件名参数]FileName - 这是上传的文件的名称。在这个例子中,它将是“logoFileName”

struts配置:

<!-- 上传文件 -->
		<action name="upload" class="uploadAction" method="uploadFile">
			<result  name="success" >/hello.jsp</result>
		</action>
		
		<!-- 下载文件 -->
		<action name="download" class="uploadAction" method="downloadFile">
			<result type="stream">
				 <param name="inputName">inputStream</param>
				<param name="contentDisposition">
					attachment;filename=${uploadFileName}
				</param>
			</result>
		</action>

修改上传文件的大小:

<constant name="struts.multipart.maxSize" value="100000000" />
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Radom7

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值