Struts2之上传与下载
创始人
2024-05-21 20:46:28
0

Struts2之上传与下载

  • 1、文件上传
    • 1.1、commons-fileupload组件
    • 1.2、单文件上传
    • 1.3、多文件上传
    • 1.4、文件下载
      • 1.4.1、Stream结果类型
      • 1.4.2、下载实例

1、文件上传

1.1、commons-fileupload组件

Commons是Apache开放源代码组织的一个Java子项目,其中的FileUpload是用来处理HTTP文件上传的子项目。

组件特点:

  • 使用简单:可以方便地嵌入到JSP文件中,编写少量的代码即可完成文件的上传功能。
  • 能够全程控制上传的内容。
  • 能够对上传文件的大小、类型进行控制。

注意:在Struts2中,struts-core依赖已经包含commons-fileupload组件的相关依赖,所以在struts2的项目中无需额外再导入commons-fileupload组件的相关依赖。

1.2、单文件上传

(1)页面

创建上传页面upload.jsp:

<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%>




文件上传页面


注意:form表单必须设置enctype="multipart/form-data"属性且提交方式为post。

创建success.jsp页面,为上传成功后的跳转页面。

<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%><%@ taglib prefix="s" uri="/struts-tags" %>




success!

文件上传成功!

(2)Action控制器

创建上传控制器UploadAction,在Action控制器中需要提供3个成员变量:文件、文件类型、文件名称。如下:

public class UploadAction extends ActionSupport {private static final long serialVersionUID = 1L;// 文件对象,与name值保持一致private File upload;// 文件类型,为name属性值 + ContentTypeprivate String uploadContentType;// 文件名称,为name属性值 + FileNameprivate String uploadFileName;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;}/*** * @Title: uploadByIO   * @Description: IO流上传* @Author: yanchengzhi   * @param: @return      * @return: String      * @throws*/public String uploadByIO() {showFileInfo();String path = "E:/upload";InputStream in = null;OutputStream on = null;try {in = new FileInputStream(upload);on = new FileOutputStream(path + "/" + uploadFileName);IOUtils.copy(in, on);} catch (Exception e) {e.printStackTrace();} finally {try {in.close();on.close();} catch (IOException e) {e.printStackTrace();}}return SUCCESS;}/*** 简单方式上传* @Title: uploadSimple   * @Description: TODO(描述这个方法的作用)* @Author: yanchengzhi   * @param: @return      * @return: String      * @throws*/public String uploadSimple() {showFileInfo();String path = "E:/upload";String realPath = path + File.separator +uploadFileName;try {FileUtils.copyFile(upload, new File(realPath));} catch (Exception e) {e.printStackTrace();}return SUCCESS;}private void showFileInfo() {System.out.println("文件大小:" + upload.length() / 1024 + "KB");System.out.println("文件名称:" + uploadFileName);System.out.println("文件类型:" + uploadContentType);}}

(3)struts.xml配置

在这里插入图片描述

             /success.jsp

注意:如果要上传的文件大小超过2M,需要配置最大文件限制,否则上传会出错。

(4)测试

启动项目,访问http://localhost:8081/struts01/upload.jsp:

在这里插入图片描述
选择文件上传,点击上传按钮,页面跳转:

在这里插入图片描述
控制台打印:

在这里插入图片描述
查看E盘下的upload目录:

在这里插入图片描述
文件上传成功。

1.3、多文件上传

多文件上传和单文件上传本质上是一样的,只不过Action里单文件是用对象接收,而多文件是用数组来接收的,直接在上面的基础上进行修改。

(1)修改upload.jsp页面

     



(2)修改UploadAction控制器

public class UploadAction extends ActionSupport {private static final long serialVersionUID = 1L;// 文件private File[] upload;// 文件类型private String[] uploadContentType;// 文件名称private String[] uploadFileName;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;}/*** * @Title: uploadByIO   * @Description: IO流上传* @Author: yanchengzhi   * @param: @return      * @return: String      * @throws*/public String uploadByIO() {String path = "E:/upload";InputStream in = null;OutputStream on = null;for(int i=0;itry {in = new FileInputStream(upload[i]);on = new FileOutputStream(path + "/" + uploadFileName);IOUtils.copy(in, on);} catch (Exception e) {e.printStackTrace();} finally {try {in.close();on.close();} catch (IOException e) {e.printStackTrace();}}	}return SUCCESS;}/*** 简单方式上传* @Title: uploadSimple   * @Description: TODO(描述这个方法的作用)* @Author: yanchengzhi   * @param: @return      * @return: String      * @throws*/public String uploadSimple() {String path = "E:/upload";for(int i=0;iString realPath = path + File.separator +uploadFileName[i];try {FileUtils.copyFile(upload[i], new File(realPath));} catch (Exception e) {e.printStackTrace();}	}return SUCCESS;}}

(3)测试

启动项目,访问http://localhost:8081/struts01/upload.jsp:

在这里插入图片描述
选择多个文件点击上传,页面跳转:

在这里插入图片描述
查看E盘upload目录:

在这里插入图片描述
多文件上传成功。

1.4、文件下载

1.4.1、Stream结果类型

在这里插入图片描述

1.4.2、下载实例

下载上面上传成功的文件。

(1)down.jsp页面

<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%>




下载页面

人间美食客.xmind下载
设计文档.docx下载

(2)DownAction控制器

public class DownloadAction extends ActionSupport {private static final long serialVersionUID = 1L;// 输入流,读取文件private InputStream inputStream;// 文件名称private String fileName;public InputStream getInputStream() {return inputStream;}public void setInputStream(InputStream inputStream) {this.inputStream = inputStream;}public String getFileName() {return fileName;}public void setFileName(String fileName) {this.fileName = fileName;}public String download() {try {String path = "E:/upload/" + fileName;// 设置中文编码fileName = URLEncoder.encode(fileName, "UTF-8");// 初始化流inputStream = new BufferedInputStream(new FileInputStream(path));} catch (Exception e) {e.printStackTrace();}return SUCCESS;}}

(3)struts.xml配置

             application/octet-streaminputStreamattachment;filename="${fileName}"4096

注意:在result里需要配置下载类型,指定流对象,设置下载形式,设置缓冲区大小等。

(4)测试

启动项目,访问http://localhost:8081/struts01/down.jsp页面:

在这里插入图片描述
分别点击两个下载链接:

在这里插入图片描述
在这里插入图片描述

相关内容

热门资讯

喜欢穿一身黑的男生性格(喜欢穿... 今天百科达人给各位分享喜欢穿一身黑的男生性格的知识,其中也会对喜欢穿一身黑衣服的男人人好相处吗进行解...
发春是什么意思(思春和发春是什... 本篇文章极速百科给大家谈谈发春是什么意思,以及思春和发春是什么意思对应的知识点,希望对各位有所帮助,...
网络用语zl是什么意思(zl是... 今天给各位分享网络用语zl是什么意思的知识,其中也会对zl是啥意思是什么网络用语进行解释,如果能碰巧...
为什么酷狗音乐自己唱的歌不能下... 本篇文章极速百科小编给大家谈谈为什么酷狗音乐自己唱的歌不能下载到本地?,以及为什么酷狗下载的歌曲不是...
华为下载未安装的文件去哪找(华... 今天百科达人给各位分享华为下载未安装的文件去哪找的知识,其中也会对华为下载未安装的文件去哪找到进行解...
怎么往应用助手里添加应用(应用... 今天百科达人给各位分享怎么往应用助手里添加应用的知识,其中也会对应用助手怎么添加微信进行解释,如果能...
家里可以做假山养金鱼吗(假山能... 今天百科达人给各位分享家里可以做假山养金鱼吗的知识,其中也会对假山能放鱼缸里吗进行解释,如果能碰巧解...
四分五裂是什么生肖什么动物(四... 本篇文章极速百科小编给大家谈谈四分五裂是什么生肖什么动物,以及四分五裂打一生肖是什么对应的知识点,希...
一帆风顺二龙腾飞三阳开泰祝福语... 本篇文章极速百科给大家谈谈一帆风顺二龙腾飞三阳开泰祝福语,以及一帆风顺二龙腾飞三阳开泰祝福语结婚对应...
美团联名卡审核成功待激活(美团... 今天百科达人给各位分享美团联名卡审核成功待激活的知识,其中也会对美团联名卡审核未通过进行解释,如果能...