Struts 2 文件上传与下载

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_41548307/article/details/82937019

单个文件上传

表单设置enctype="multipart/form-data“

表单设置method="POST“ <s:file name="f1" label="logo"/>

多文件上传:

把所有的属性改为数组即可。

private File []f1;

private String [] contentType;

private String [] fileName;

Action中设置:

get,set方法必须添加file的名字;

f1, contentType, fileName三个属性 (f1为File类型, contentType, fileName为String类型)

f1的getter/setter方法

f1ContentType的getter/setter方法

f1FileName的getter/setter方法

//上传Action
public class UpfileAction extends ActionSupport {

	private File file;
	private String contentType;
	private String fileName;
	private String txt;

	public String getTxt() {
		return txt;
	}

	public void setTxt(String txt) {
		this.txt = txt;
	}

	public File getFile() {
		return file;
	}

	public void setFile(File file) {
		this.file = file;
	}

	public String getFileContentType() {
		return contentType;
	}

	public void setFileContentType(String contentType) {
		this.contentType = contentType;
	}

	public String getFileFileName() {
		return fileName;
	}

	public void setFileFileName(String fileName) {
		this.fileName = fileName;
	}

	@Override
	public String execute() throws Exception {
		
		System.out.println(txt);
		
		// 获取服务器根目录
		String path = ServletActionContext.getServletContext().getRealPath(
				"/upfile");
		// 创建服务根目录下的文件夹
		File dir = new File(path);
		if (!dir.exists()) {
			dir.mkdirs();
		}
		// 目标文件
		File dest = new File(dir, fileName);

		// 字节输入输出流
		FileInputStream in = new FileInputStream(file);
		FileOutputStream out = new FileOutputStream(dest);
		// 临时缓存
		byte[] b = new byte[1024];
		int len = -1;
		// 文件复制
		while ((len = in.read(b)) != -1) {
			out.write(b, 0, len);
		}
		// 关流
		in.close();
		out.close();
		// 返回提示信息
		this.addActionMessage("文件上传成功!");
		return SUCCESS;
	}

}
//下载Action
public class DownloadAction extends ActionSupport {

	private int id;
	private String fileName;

	public String getFileName() {
		return fileName;
	}

	public void setFileName(String fileName) {
		this.fileName = fileName;
	}

	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}
	
	public InputStream getInputStream(){
		try {
			//设置下载文件名称
			fileName=URLEncoder.encode("高清无码.avi","UTF-8");
		} catch (UnsupportedEncodingException e) {
			e.printStackTrace();
		}
		//设置下载文件路径
		String filepath = "upfile/aaaaa.xlsx";
		return ServletActionContext.getServletContext().getResourceAsStream(filepath);
	}
	

	@Override
	public String execute() throws Exception {
		System.out.println(id);
		return SUCCESS;
	}

}

struts.xml中的配置:

<struts>
- <!--  配置文件上传上限 
  --> 
  <constant name="struts.multipart.maxSize" value="10000000" /> 
- <!--  使用国际化配置 
  --> 
  <constant name="struts.custom.i18n.resources" value="res" /> 
- <package name="testpack" extends="struts-default" namespace="/">
- <action name="upfile" class="com.web.action.UpfileAction">
  <result>/index.jsp</result> 
  <result name="input">/index.jsp</result> 
- <!--  添加拦截器实现文件上传限制 
  --> 
- <interceptor-ref name="defaultStack">
- <!-- 文件大小,单位字节
  --> 
  <param name="fileUpload.maximumSize">1000000</param> 
- <!-- 文件类型
  --> 
- <!--   <param name="fileUpload.allowedTypes">text/plain,application/vnd.ms-excel</param> 
  --> 
- <!-- 文件后缀
  --> 
  <param name="fileUpload.allowedExtensions">.txt,.xls</param> 
  </interceptor-ref>
  </action>
- <action name="download" class="com.web.action.DownloadAction">
- <!--  文件下载时result标签的type属性设置成stream 
  --> 
- <result type="stream">
- <!--  配置下载文件类型 
  --> 
  <param name="contentType">application/octet-stream</param> 
- <!--  下载文件名称 
  --> 
  <param name="contentDisposition">attachment;filename="${fileName}"</param> 
- <!--  *下载文件流对象 
  --> 
  <param name="inputName">inputStream</param> 
- <!--  文件大小 
  --> 
  <param name="bufferSize">2048</param> 
- <!--  设置是否缓存 
  --> 
  <param name="allowCaching">false</param> 
- <!--  字符编码 
  --> 
  <param name="contentCharSet">UTF-8</param> 
  </result>
  </action>
  </package>
  </struts>

JSP页面中的配置:

引入struts2标签
<%@ taglib uri="/struts-tags" prefix="s" %>

<body>
  	<s:actionerror/>    //错误提示
  	<s:actionmessage/>
    <s:form action="upfile" method="post" namespace="/" enctype="multipart/form-data">
    	<s:textfield name="txt" label="标题"></s:textfield>
    	<s:file name="file" label="文件上传"></s:file>
    	<s:submit value="提交"></s:submit>
    </s:form>
  </body>


//下载JSP页面
 
  <body>
    <a href="download?id=100001">下载</a>
  </body>

猜你喜欢

转载自blog.csdn.net/qq_41548307/article/details/82937019