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

相关文章

SQL Server配置管理器无法打开的四种解决方法

《SQLServer配置管理器无法打开的四种解决方法》本文总结了SQLServer配置管理器无法打开的四种解决方法,文中通过图文示例介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的... 目录方法一:桌面图标进入方法二:运行窗口进入检查版本号对照表php方法三:查找文件路径方法四:检查 S

Java中调用数据库存储过程的示例代码

《Java中调用数据库存储过程的示例代码》本文介绍Java通过JDBC调用数据库存储过程的方法,涵盖参数类型、执行步骤及数据库差异,需注意异常处理与资源管理,以优化性能并实现复杂业务逻辑,感兴趣的朋友... 目录一、存储过程概述二、Java调用存储过程的基本javascript步骤三、Java调用存储过程示

Visual Studio 2022 编译C++20代码的图文步骤

《VisualStudio2022编译C++20代码的图文步骤》在VisualStudio中启用C++20import功能,需设置语言标准为ISOC++20,开启扫描源查找模块依赖及实验性标... 默认创建Visual Studio桌面控制台项目代码包含C++20的import方法。右键项目的属性:

Linux中SSH服务配置的全面指南

《Linux中SSH服务配置的全面指南》作为网络安全工程师,SSH(SecureShell)服务的安全配置是我们日常工作中不可忽视的重要环节,本文将从基础配置到高级安全加固,全面解析SSH服务的各项参... 目录概述基础配置详解端口与监听设置主机密钥配置认证机制强化禁用密码认证禁止root直接登录实现双因素

python删除xml中的w:ascii属性的步骤

《python删除xml中的w:ascii属性的步骤》使用xml.etree.ElementTree删除WordXML中w:ascii属性,需注册命名空间并定位rFonts元素,通过del操作删除属... 可以使用python的XML.etree.ElementTree模块通过以下步骤删除XML中的w:as

嵌入式数据库SQLite 3配置使用讲解

《嵌入式数据库SQLite3配置使用讲解》本文强调嵌入式项目中SQLite3数据库的重要性,因其零配置、轻量级、跨平台及事务处理特性,可保障数据溯源与责任明确,详细讲解安装配置、基础语法及SQLit... 目录0、惨痛教训1、SQLite3环境配置(1)、下载安装SQLite库(2)、解压下载的文件(3)、

MySQL数据库的内嵌函数和联合查询实例代码

《MySQL数据库的内嵌函数和联合查询实例代码》联合查询是一种将多个查询结果组合在一起的方法,通常使用UNION、UNIONALL、INTERSECT和EXCEPT关键字,下面:本文主要介绍MyS... 目录一.数据库的内嵌函数1.1聚合函数COUNT([DISTINCT] expr)SUM([DISTIN

XML重复查询一条Sql语句的解决方法

《XML重复查询一条Sql语句的解决方法》文章分析了XML重复查询与日志失效问题,指出因DTO缺少@Data注解导致日志无法格式化、空指针风险及参数穿透,进而引发性能灾难,解决方案为在Controll... 目录一、核心问题:从SQL重复执行到日志失效二、根因剖析:DTO断裂引发的级联故障三、解决方案:修复

Java实现自定义table宽高的示例代码

《Java实现自定义table宽高的示例代码》在桌面应用、管理系统乃至报表工具中,表格(JTable)作为最常用的数据展示组件,不仅承载对数据的增删改查,还需要配合布局与视觉需求,而JavaSwing... 目录一、项目背景详细介绍二、项目需求详细介绍三、相关技术详细介绍四、实现思路详细介绍五、完整实现代码

Linux如何快速检查服务器的硬件配置和性能指标

《Linux如何快速检查服务器的硬件配置和性能指标》在运维和开发工作中,我们经常需要快速检查Linux服务器的硬件配置和性能指标,本文将以CentOS为例,介绍如何通过命令行快速获取这些关键信息,... 目录引言一、查询CPU核心数编程(几C?)1. 使用 nproc(最简单)2. 使用 lscpu(详细信