Struts2之上传与下载
创始人
2024-05-21 22:05:12
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页面:

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

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

相关内容

热门资讯

常用商务英语口语   商务英语是以适应职场生活的语言要求为目的,内容涉及到商务活动的方方面面。下面是小编收集的常用商务...
六年级上册英语第一单元练习题   一、根据要求写单词。  1.dry(反义词)__________________  2.writ...
复活节英文怎么说 复活节英文怎么说?复活节的英语翻译是什么?复活节:Easter;"Easter,anniversar...
2008年北京奥运会主题曲 2008年北京奥运会(第29届夏季奥林匹克运动会),2008年8月8日到2008年8月24日在中华人...
英语道歉信 英语道歉信15篇  在日常生活中,道歉信的使用频率越来越高,通过道歉信,我们可以更好地解释事情发生的...
六年级英语专题训练(连词成句... 六年级英语专题训练(连词成句30题)  1. have,playhouse,many,I,toy,i...
上班迟到情况说明英语   每个人都或多或少的迟到过那么几次,因为各种原因,可能生病,可能因为交通堵车,可能是因为天气冷,有...
小学英语教学论文 小学英语教学论文范文  引导语:英语教育一直都是每个家长所器重的,那么有关小学英语教学论文要怎么写呢...
英语口语学习必看的方法技巧 英语口语学习必看的方法技巧如何才能说流利的英语? 说外语时,我们主要应做到四件事:理解、回答、提问、...
四级英语作文选:Birth ... 四级英语作文范文选:Birth controlSince the Chinese Governmen...
金融专业英语面试自我介绍 金融专业英语面试自我介绍3篇  金融专业的学生面试时,面试官要求用英语做自我介绍该怎么说。下面是小编...
我的李老师走了四年级英语日记... 我的李老师走了四年级英语日记带翻译  我上了五个学期的小学却换了六任老师,李老师是带我们班最长的语文...
小学三年级英语日记带翻译捡玉... 小学三年级英语日记带翻译捡玉米  今天,我和妈妈去外婆家,外婆家有刚剥的`玉米棒上带有玉米籽,好大的...
七年级英语优秀教学设计 七年级英语优秀教学设计  作为一位兢兢业业的人民教师,常常要写一份优秀的教学设计,教学设计是把教学原...
我的英语老师作文 我的英语老师作文(通用21篇)  在日常生活或是工作学习中,大家都有写作文的经历,对作文很是熟悉吧,...
英语老师教学经验总结 英语老师教学经验总结(通用19篇)  总结是指社会团体、企业单位和个人对某一阶段的学习、工作或其完成...
初一英语暑假作业答案 初一英语暑假作业答案  英语练习一(基础训练)第一题1.D2.H3.E4.F5.I6.A7.J8.C...
大学生的英语演讲稿 大学生的英语演讲稿范文(精选10篇)  使用正确的写作思路书写演讲稿会更加事半功倍。在现实社会中,越...
VOA美国之音英语学习网址 VOA美国之音英语学习推荐网址 美国之音网站已经成为语言学习最重要的资源站点,在互联网上还有若干网站...
商务英语期末试卷 Part I Term Translation (20%)Section A: Translate ...