struts2文件上传下载前段html,struts.xml配置和后端代码

2024-04-30 19:58

本文主要是介绍struts2文件上传下载前段html,struts.xml配置和后端代码,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

单文件上传、多文件上传和文件下载

单文件上传:

index页面:

复制代码
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><base href="<%=basePath%>"><title>文件上传</title></head><body><!-- 上传页面的准备 --><s:form action="upload.action" enctype="multipart/form-data" method="post"><s:textfield name ="title" label ="标题"/><br/><s:file name ="upload" label="选择文件"/><br/><s:submit name ="submit" value ="上传文件"/></s:form> </body>
</html>
复制代码

 

struts.xml配置相应的action:

<!--  单文件上传--><action name="upload" class="action.UploadAction"><param name="savePath">/image</param><result name="success">/upload_success.jsp</result></action>

 

对应的UploadAction类:

复制代码
public class UploadAction extends ActionSupport{//封装上传文件的属性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;}public void setSavePath(String savePath) {this.savePath = savePath;}//获取文件上传的路径private String savePath;@Overridepublic String execute() throws Exception {//创建缓存数组byte [] buffer =new byte[1024];//读取文件FileInputStream fis =new FileInputStream(getUpload());//保存文件,并设置保存目录的路径FileOutputStream fos =new FileOutputStream(getSavePath()+"\\"+this.getUploadFileName());int length =fis.read(buffer);while(length>0){//每次写入length长度的内容fos.write(buffer,0,length);length=fis.read(buffer);}fis.close();fos.flush();fos.close();return SUCCESS;}public String getSavePath(){return ServletActionContext.getServletContext().getRealPath(savePath);}
}
复制代码

 

 

多文件上传:

和单文件上传差不多只需要在index页面多添加几个文件上传的标签:

index页面:

复制代码
<body><!-- 上传页面的准备 --><s:form action="uploads.action" enctype="multipart/form-data" method="post"><s:textfield name ="title" label ="标题"/><br/><s:file name ="uploads" label="选择文件"/><br/><s:file name ="uploads" label="选择文件"/><br/><s:file name ="uploads" label="选择文件"/><br/><s:submit name ="submit" value ="上传文件"/></s:form> </body>
复制代码

 

struts.xml配置相应的action:

复制代码
<!-- 多文件上传 --><action name ="uploads" class="action.UploadsAction"><!--通过param参数设置保存目录的路径 --><param name="savePath">/image</param><result name="success">/upload_success.jsp</result></action>
复制代码

 

对应的UploadsAction类:

复制代码
public class UploadsAction extends ActionSupport{//封装上传文件的属性private File[] uploads;//封装上传文件的类型private String[] uploadContentType;//封装上传文件的名称private String[] uploadFileName;public File[] getUploads() {return uploads;}public void setUploads(File[] uploads) {this.uploads = uploads;}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;}//获取文件上传的路径private String savePath;@Overridepublic String execute() throws Exception {//创建缓存数组byte [] buffer =new byte[1024];//读取文件for (int i = 0; i < uploads.length; i++) {FileInputStream fis =new FileInputStream(getUploads()[i]);//保存文件,并设置保存目录的路径FileOutputStream fos =new FileOutputStream(getSavePath()+"\\"+this.getUploadFileName()[i]);int length =fis.read(buffer);while(length>0){//每次写入length长度的内容fos.write(buffer,0,length);length=fis.read(buffer);}fis.close();fos.flush();fos.close();}return SUCCESS;}public String getSavePath(){return ServletActionContext.getServletContext().getRealPath(savePath);}
}
复制代码

 

文件下载:

index页面:

<body><a href="download.action?fileName=16.1.txt">点击此处下载文档</a>  </body>

 

struts.xml配置相应的action:

复制代码
<action name="download" class="action.FileDownAction"><!--下载文件的路径  --><param name="inputPath">/image</param><result name="success" type="stream"><!--指定内容类型,下载的文件,可执行文件  --><param name="contentType">application/octet-stream</param><param name="inputName">inputStream</param><param name="contentDisposition">attachment;filename="${fileName}"</param><!--读取和下载文件时缓存区大小  --><param name="bufferSize">4096</param></result></action>
复制代码

 

对应的UploadsAction类:

复制代码
public class FileDownAction extends ActionSupport {//读取下载文件的目录   private String inputPath;//下载文件的文件名private String fileName;//读取下载文件的输入流private InputStream inputStream;//下载文件的类型private String contentType;public String getInputPath() {return inputPath;}public void setInputPath(String inputPath) {this.inputPath = inputPath;}public String getFileName() {return fileName;}public void setFileName(String fileName) {this.fileName = fileName;}//文件下载的核心,获取输入流public InputStream getInputStream() throws Exception {//获取真实的路径String path =ServletActionContext.getServletContext().getRealPath(inputPath);return new BufferedInputStream(new FileInputStream(path+"\\"+fileName));}public void setInputStream(InputStream inputStream) {this.inputStream = inputStream;}public String getContentType() {return contentType;}public void setContentType(String contentType) {this.contentType = contentType;}@Overridepublic String execute() throws Exception {return SUCCESS;}}
文章来源:https://www.cnblogs.com/qingzhi/p/5945881.html

这篇关于struts2文件上传下载前段html,struts.xml配置和后端代码的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/949784

相关文章

MySQL数据库双机热备的配置方法详解

《MySQL数据库双机热备的配置方法详解》在企业级应用中,数据库的高可用性和数据的安全性是至关重要的,MySQL作为最流行的开源关系型数据库管理系统之一,提供了多种方式来实现高可用性,其中双机热备(M... 目录1. 环境准备1.1 安装mysql1.2 配置MySQL1.2.1 主服务器配置1.2.2 从

MyBatis常用XML语法详解

《MyBatis常用XML语法详解》文章介绍了MyBatis常用XML语法,包括结果映射、查询语句、插入语句、更新语句、删除语句、动态SQL标签以及ehcache.xml文件的使用,感兴趣的朋友跟随小... 目录1、定义结果映射2、查询语句3、插入语句4、更新语句5、删除语句6、动态 SQL 标签7、ehc

vite搭建vue3项目的搭建步骤

《vite搭建vue3项目的搭建步骤》本文主要介绍了vite搭建vue3项目的搭建步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学... 目录1.确保Nodejs环境2.使用vite-cli工具3.进入项目安装依赖1.确保Nodejs环境

Nginx搭建前端本地预览环境的完整步骤教学

《Nginx搭建前端本地预览环境的完整步骤教学》这篇文章主要为大家详细介绍了Nginx搭建前端本地预览环境的完整步骤教学,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录项目目录结构核心配置文件:nginx.conf脚本化操作:nginx.shnpm 脚本集成总结:对前端的意义很多

Linux云服务器手动配置DNS的方法步骤

《Linux云服务器手动配置DNS的方法步骤》在Linux云服务器上手动配置DNS(域名系统)是确保服务器能够正常解析域名的重要步骤,以下是详细的配置方法,包括系统文件的修改和常见问题的解决方案,需要... 目录1. 为什么需要手动配置 DNS?2. 手动配置 DNS 的方法方法 1:修改 /etc/res

mysql8.0.43使用InnoDB Cluster配置主从复制

《mysql8.0.43使用InnoDBCluster配置主从复制》本文主要介绍了mysql8.0.43使用InnoDBCluster配置主从复制,文中通过示例代码介绍的非常详细,对大家的学习或者... 目录1、配置Hosts解析(所有服务器都要执行)2、安装mysql shell(所有服务器都要执行)3、

前端缓存策略的自解方案全解析

《前端缓存策略的自解方案全解析》缓存从来都是前端的一个痛点,很多前端搞不清楚缓存到底是何物,:本文主要介绍前端缓存的自解方案,文中通过代码介绍的非常详细,需要的朋友可以参考下... 目录一、为什么“清缓存”成了技术圈的梗二、先给缓存“把个脉”:浏览器到底缓存了谁?三、设计思路:把“发版”做成“自愈”四、代码

通过React实现页面的无限滚动效果

《通过React实现页面的无限滚动效果》今天我们来聊聊无限滚动这个现代Web开发中不可或缺的技术,无论你是刷微博、逛知乎还是看脚本,无限滚动都已经渗透到我们日常的浏览体验中,那么,如何优雅地实现它呢?... 目录1. 早期的解决方案2. 交叉观察者:IntersectionObserver2.1 Inter

Vue3视频播放组件 vue3-video-play使用方式

《Vue3视频播放组件vue3-video-play使用方式》vue3-video-play是Vue3的视频播放组件,基于原生video标签开发,支持MP4和HLS流,提供全局/局部引入方式,可监听... 目录一、安装二、全局引入三、局部引入四、基本使用五、事件监听六、播放 HLS 流七、更多功能总结在 v

Java集合之Iterator迭代器实现代码解析

《Java集合之Iterator迭代器实现代码解析》迭代器Iterator是Java集合框架中的一个核心接口,位于java.util包下,它定义了一种标准的元素访问机制,为各种集合类型提供了一种统一的... 目录一、什么是Iterator二、Iterator的核心方法三、基本使用示例四、Iterator的工