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

相关文章

C++使用栈实现括号匹配的代码详解

《C++使用栈实现括号匹配的代码详解》在编程中,括号匹配是一个常见问题,尤其是在处理数学表达式、编译器解析等任务时,栈是一种非常适合处理此类问题的数据结构,能够精确地管理括号的匹配问题,本文将通过C+... 目录引言问题描述代码讲解代码解析栈的状态表示测试总结引言在编程中,括号匹配是一个常见问题,尤其是在

部署Vue项目到服务器后404错误的原因及解决方案

《部署Vue项目到服务器后404错误的原因及解决方案》文章介绍了Vue项目部署步骤以及404错误的解决方案,部署步骤包括构建项目、上传文件、配置Web服务器、重启Nginx和访问域名,404错误通常是... 目录一、vue项目部署步骤二、404错误原因及解决方案错误场景原因分析解决方案一、Vue项目部署步骤

C#中读取XML文件的四种常用方法

《C#中读取XML文件的四种常用方法》Xml是Internet环境中跨平台的,依赖于内容的技术,是当前处理结构化文档信息的有力工具,下面我们就来看看C#中读取XML文件的方法都有哪些吧... 目录XML简介格式C#读取XML文件方法使用XmlDocument使用XmlTextReader/XmlTextWr

Java调用DeepSeek API的最佳实践及详细代码示例

《Java调用DeepSeekAPI的最佳实践及详细代码示例》:本文主要介绍如何使用Java调用DeepSeekAPI,包括获取API密钥、添加HTTP客户端依赖、创建HTTP请求、处理响应、... 目录1. 获取API密钥2. 添加HTTP客户端依赖3. 创建HTTP请求4. 处理响应5. 错误处理6.

使用 sql-research-assistant进行 SQL 数据库研究的实战指南(代码实现演示)

《使用sql-research-assistant进行SQL数据库研究的实战指南(代码实现演示)》本文介绍了sql-research-assistant工具,该工具基于LangChain框架,集... 目录技术背景介绍核心原理解析代码实现演示安装和配置项目集成LangSmith 配置(可选)启动服务应用场景

前端原生js实现拖拽排课效果实例

《前端原生js实现拖拽排课效果实例》:本文主要介绍如何实现一个简单的课程表拖拽功能,通过HTML、CSS和JavaScript的配合,我们实现了课程项的拖拽、放置和显示功能,文中通过实例代码介绍的... 目录1. 效果展示2. 效果分析2.1 关键点2.2 实现方法3. 代码实现3.1 html部分3.2

Python中顺序结构和循环结构示例代码

《Python中顺序结构和循环结构示例代码》:本文主要介绍Python中的条件语句和循环语句,条件语句用于根据条件执行不同的代码块,循环语句用于重复执行一段代码,文章还详细说明了range函数的使... 目录一、条件语句(1)条件语句的定义(2)条件语句的语法(a)单分支 if(b)双分支 if-else(

SpringBoot+MyBatis-Flex配置ProxySQL的实现步骤

《SpringBoot+MyBatis-Flex配置ProxySQL的实现步骤》本文主要介绍了SpringBoot+MyBatis-Flex配置ProxySQL的实现步骤,文中通过示例代码介绍的非常详... 目录 目标 步骤 1:确保 ProxySQL 和 mysql 主从同步已正确配置ProxySQL 的

Spring Boot整合log4j2日志配置的详细教程

《SpringBoot整合log4j2日志配置的详细教程》:本文主要介绍SpringBoot项目中整合Log4j2日志框架的步骤和配置,包括常用日志框架的比较、配置参数介绍、Log4j2配置详解... 目录前言一、常用日志框架二、配置参数介绍1. 日志级别2. 输出形式3. 日志格式3.1 PatternL

CSS弹性布局常用设置方式

《CSS弹性布局常用设置方式》文章总结了CSS布局与样式的常用属性和技巧,包括视口单位、弹性盒子布局、浮动元素、背景和边框样式、文本和阴影效果、溢出隐藏、定位以及背景渐变等,通过这些技巧,可以实现复杂... 一、单位元素vm 1vm 为视口的1%vh 视口高的1%vmin 参照长边vmax 参照长边re