Struts2文件的上传:
要想使用 HTML 表单上传一个或多个文件, 必须把 HTML 表单的 enctype 属性设置为 multipart/form-data, 把它的 method 属性设置为 post
为了让用户能够选择一个文件进行上传, 程序员必须提供一个 <input type=“file”>字段
struts2 的文件上传使用拦截器 fileUpload 完成上传,只需要提供属性接受数据即可,属性名称具有固定性
上传需要属性
文件:File 名称,是表单 ,<input type=”file” z中name的值
文件名称:String inputNameFileName , 自定义 + “FileName”
文件类型:String inputNameContentType , 自定义 + “ContentType”
如果上传多个文件,需要使用List或数组接收,文件名称与类型,使用逗号分隔
代码实现:
jsp文件:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="/struts-tags" prefix="s" %>
<!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>Insert title here</title>
</head>
<body>
<s:fielderror></s:fielderror>
<form action="${pageContext.request.contextPath}/fileUploadAction" method="post" enctype="multipart/form-data">
上传内容:<input type="file" name="image"/> <br/>
上传内容:<input type="file" name="image"/> <br/>
<input type="submit" value="上传" />
</form>
</body>
</html>
action类:
public class FileUploadAction extends ActionSupport {
// 1文件
private List<File> image;
// 2 文件名称
private String imageFileName;
// 3 文件类型
private String imageContentType; // MIME类型,格式:大类型/小类型;参数 例如:text/html;charset=UTF-8
@Override
public String execute() throws Exception {
// 保存文件到指定的位置
String baseDir = ServletActionContext.getServletContext().getRealPath("/upload");
String[] fileNameArray = imageFileName.split(",");
for (int i = 0; i < image.size(); i++) {
File img = image.get(i);
// 使用工具类,将file保存到指定的目录中的指定文件名
FileUtils.copyFile(img, new File(baseDir, fileNameArray[i]));
}
return SUCCESS;
}
public List<File> getImage() {
return image;
}
public void setImage(List<File> image) {
this.image = image;
}
public String getImageFileName() {
return imageFileName;
}
public void setImageFileName(String imageFileName) {
this.imageFileName = imageFileName;
}
public String getImageContentType() {
return imageContentType;
}
public void setImageContentType(String imageContentType) {
this.imageContentType = imageContentType;
}
}
struts.xml文件中action的配置:
<action name="fileUploadAction" class="com.my.action.FileUploadAction" >
<result name="success">/success.jsp</result>
<!-- 输入信息错误的处理结果 input -->
<result name="input">fileUpload.jsp</result>
<!-- 默认情况,引用拦截器栈 -->
<interceptor-ref name="defaultStack">
<!-- 给上传拦截器设置,允许的扩展名-->
<param name="fileUpload.allowedExtensions">.jpeg,.png</param>
</interceptor-ref>
</action>
Struts2的文件下载:
struts2提供了stream结果类型,该结果类型就是专门用于支持文件下载功能的
指定stream结果类型 需要指定一个 inputName参数,该参数指定一个输入流,提供被下载文件的入口
action类
package com.my.action;
import java.io.InputStream;
import java.io.UnsupportedEncodingException;
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.ActionSupport;
public class DownloadAction extends ActionSupport {
//1 文件,
private InputStream targetName; //struts.xml配置内容:<param name="inputName">targetName</param>
//2 文件类型
private String fileType;
//3 文件名称
private String fileName;
@Override
public String execute() throws Exception {
// 3 设置文件名称
this.fileName = "图片.PNG";
// 1 提供下载资源流
this.targetName = ServletActionContext.getServletContext().getResourceAsStream("/upload/" + fileName);
// 2 获得需要下载文件类型
this.fileType = ServletActionContext.getServletContext().getMimeType(fileName);
return SUCCESS;
}
public InputStream getTargetName() {
return targetName;
}
public void setTargetName(InputStream targetName) {
this.targetName = targetName;
}
public String getFileType() {
return fileType;
}
public void setFileType(String fileType) {
this.fileType = fileType;
}
public String getFileName() throws UnsupportedEncodingException {
// 4 处理下载中文乱码情况
fileName = new String(fileName.getBytes("GBK"),"ISO-8859-1");
return fileName;
}
public void setFileName(String fileName) {
this.fileName = fileName;
}
}
struts.xml文件中action的配置:
<action name="fileDownloadAction" class="com.my.action.DownloadAction">
<result name="success" type="stream">
<!-- 1 确定文件,需要设置action中的属性 -->
<param name="inputName">targetName</param>
<!-- 2 确定文件需要下载,且提供下载文件名称
等价于
response.setHeader("content-disposition","attachment;filename=文件名称");
-->
<param name="contentDisposition">attachment;filename=${fileName}</param>
<!-- 3 确定文件类型 -->
<param name="contentType">${fileType}</param>
</result>
</action>
原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/12072.html