Struts2框架使用(十)之struts2的上传和下载

Struts2  文件上传

首先是Struts2的上传,Struts2 文件上传是基于 Struts2 拦截器实现的,使用的是fileupload组件;

首先如果想要上传文件,则需要在表单处添加 enctype="multipart/form-data" 属性。

<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%>
<%@taglib prefix="s" uri="/struts-tags" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<h1>文件上传</h1>
<s:fielderror></s:fielderror>
<form action="upload" method="post" enctype="multipart/form-data">姓名:<input type="text" name="name" />文件:<input type="file" name="java1234"/><br/><input type="submit" value="提交"/>
</form>
<h1>多文件上传</h1>
<s:fielderror></s:fielderror>
<form action="uploads" method="post" enctype="multipart/form-data">文件1:<input type="file" name="java1234"/><br/>文件2:<input type="file" name="java1234"/><br/>文件3:<input type="file" name="java1234"/><br/><input type="submit" value="提交"/>
</form>
</body>
</html>

然后在Action中获取数据需要按照一定格式来获取:

Struts2 获取上传文件:name (name 是文件表单的 name)
Struts2 获取上传文件名:name+FileName;
Struts2 获取上传文件的类型:name+ContentType;

import java.io.File;import org.apache.commons.io.FileUtils;import com.opensymphony.xwork2.ActionSupport;public class FileUploadAction extends ActionSupport{/*** 文件上传*/private static final long serialVersionUID = 1L;private File java1234; // 文件private String java1234FileName;  // 文件名private String java1234ContentType;  // 文件类型private String name;@Overridepublic String execute() throws Exception {System.out.println("name=" + name);System.out.println("文件名:"+java1234FileName);System.out.println("文件类型:"+java1234ContentType);//这里写的是存储路径String filePath="C:/"+java1234FileName;//根据路径创建一个文件File saveFile=new File(filePath);//将上传得到文件流复制到路径所创建的文件上
        FileUtils.copyFile(java1234, saveFile);return SUCCESS;}

之后再struts.xml文件中配置Action即可,注意:这里的校验,是先校验package外的最大大小,一旦超过则抛出异常,不会进入到action中。

通过package外最大文件上传校验后,进入到action内部的拦截器校验时,一旦拦截,则会返回个input字段。

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN""http://struts.apache.org/dtds/struts-2.0.dtd"><struts><!-- Struts2 最大文件上传大小默认是 2M <constant name="struts.multipart.maxSize" value="20000000"></constant>--><package name="manager" extends="struts-default">    <action name="upload" class="com.mrlv.action.FileUploadAction"><result name="success">/success.jsp</result><result name="input">/fileupload.jsp</result><!-- 配置文件的大小及类型 --><!-- 允许后缀名为png,bmp,jpg,doc,xls的文件上传<interceptor-ref name="fileUpload"><param name="allowedExtensions">  png,bmp,jpg,doc,xls  </param>  </interceptor-ref>--> <!-- 下面是限定文件类型以及文件大小 --><interceptor-ref name="fileUpload"><param name="allowedTypes">image/bmp,image/x-png,image/gif,image/jpg,image/jpeg,image/pjpeg</param><param name="maximumSize">81101</param></interceptor-ref><interceptor-ref name="defaultStack"></interceptor-ref>         </action></package>
</struts>

 这里就是简单的文件上传了。如果是多文件上传的话,只需要在Action中接收file的时候,创建数组类型即可。

 

Struts2  文件下载

关于文件下载,返回的是文件流。

所以在创建Action的时,如下

package com.mrlv.action;import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStream;
import java.io.UnsupportedEncodingException;import com.opensymphony.xwork2.ActionSupport;public class FileDownloadAction extends ActionSupport{/*** */private static final long serialVersionUID = 1L;private String fileName;//返回的是一个文件流public InputStream getInputStream() throws FileNotFoundException {//这里取得是下载文件的路径File file = new File("C:/LX.txt");//给文件命名,中文可能回有点问题this.fileName = "LX.txt";//返回一个文件流return new FileInputStream(file);}public String getFileName() throws UnsupportedEncodingException {return fileName;}public void setFileName(String fileName) {this.fileName = fileName;}}

 

在struts.xml中的配置

<action name="download" class="com.mrlv.action.FileDownloadAction"><result type="stream"><!-- attachment这个参数,表示跟附件一样,filename这个参数是下载文件名${fileName}通过get方法获得 --><param name="contentDisposition">attachment;filename=${fileName}</param></result></action>

接下来在jsp页面调用即可。

<a href="download">文件下载</a>

 

转载于:https://www.cnblogs.com/lvshiyu/p/8086647.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/390497.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

module_param 用于动态开启/关闭 驱动打印信息

1.定义模块参数的方法: module_param(name, type, perm); 其中,name:表示参数的名字; type:表示参数的类型; perm:表示参数的访问权限; type参数设定的类型和perm的访问权限具体数值数值请参考内核定义。 2、可以在insmod&#xff08;装载模块&#xff09;的时候为参…

超链接href属性_如何使用标签上的HREF属性制作HTML超链接

超链接href属性A website is a collection of web pages. And these pages need to be linked or connected by something. And to do so, we need to use a tag provided by HTML: the a tag. 网站是网页的集合。 这些页面需要通过某种方式链接或连接。 为此&#xff0c;我们需…

剑指 Offer 42. 连续子数组的最大和

输入一个整型数组&#xff0c;数组中的一个或连续多个整数组成一个子数组。求所有子数组的和的最大值。 要求时间复杂度为O(n)。 示例1: 输入: nums [-2,1,-3,4,-1,2,1,-5,4] 输出: 6 解释: 连续子数组 [4,-1,2,1] 的和最大&#xff0c;为 6。 解题思路 对于一个数组&…

centos 7安装配置vsftpd

yum install -y vsftpd #安装vsftpd yum install -y psmisc net-tools systemd-devel libdb-devel perl-DBI #安装vsftpd虚拟用户配置依赖包 systemctl enable vsftpd.service #设置vsftpd开机启动 cp /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf-bak #备份默认配置文…

amazeui学习笔记--css(基本样式3)--文字排版Typography

amazeui学习笔记--css&#xff08;基本样式3&#xff09;--文字排版Typography 一、总结 1、字体&#xff1a;amaze默认非 衬线字体&#xff08;sans-serif&#xff09; 2、引用块blockquote和定义列表&#xff1a;引用块blockquote和定义列表&#xff08;dl dt&#xff09;注意…

剑指 Offer 46. 把数字翻译成字符串

给定一个数字&#xff0c;我们按照如下规则把它翻译为字符串&#xff1a;0 翻译成 “a” &#xff0c;1 翻译成 “b”&#xff0c;……&#xff0c;11 翻译成 “l”&#xff0c;……&#xff0c;25 翻译成 “z”。一个数字可能有多个翻译。请编程实现一个函数&#xff0c;用来计…

Zend Guard 7 , Zend Guard Loader处理PHP加密

环境&#xff1a;使用Zend Guard 7 软件加密。 PHP 5.6 LNMP 一键安装&#xff0c;PHP5.6Zend Guard Loader &#xff08;对应的版本文件&#xff09;是已经安装好了&#xff0c;还要安装 opcache.so ,直接在lnmp 安装教程中有。因为自动安装 的 版本并不对应&#xff0c;于…

qr码是二维码码_如何使用QR码进行有效的营销和推广

qr码是二维码码Efficient means doing things right. Effective is about doing the right things.高效意味着做正确的事。 有效就是做正确的事。 I am an advocate for efficiency and effectiveness. There must be a more efficient way to share contact details other th…

ELK学习记录三 :elasticsearch、logstash及kibana的安装与配置(windows)

注意事项&#xff1a; 1.ELK版本要求5.X以上 2.Elasticsearch5.x版本必须基于jdk1.8&#xff0c;安装环境必须使用jdk1.8 3.操作系统windows10作为测试环境&#xff0c;其他环境命令有差异&#xff0c;请注意 4.本教程适合完全离线安装 5.windows版本ELK安装包下载路径&#xf…

【quickhybrid】JSBridge的实现

前言 本文介绍quick hybrid框架的核心JSBridge的实现 由于在最新版本中&#xff0c;已经没有考虑iOS7等低版本&#xff0c;因此在选用方案时没有采用url scheme方式&#xff0c;而是直接基于WKWebView实现 交互原理 具体H5和Native的交互原理可以参考前文的H5和Native交互原理 …

mongodb atlas_如何使用MongoDB Atlas将MERN应用程序部署到Heroku

mongodb atlas简介 (Introduction to MERN) In this article, well be building and deploying an application built with the MERN stack to Heroku.在本文中&#xff0c;我们将构建和部署使用MERN堆栈构建的应用程序到Heroku。 MERN, which stands for MongoDB, Express, R…

面试题 10.02. 变位词组

编写一种方法&#xff0c;对字符串数组进行排序&#xff0c;将所有变位词组合在一起。变位词是指字母相同&#xff0c;但排列不同的字符串。 注意&#xff1a;本题相对原题稍作修改 示例: 输入: [“eat”, “tea”, “tan”, “ate”, “nat”, “bat”], 输出: [ [“ate”,…

智能合约设计模式

2019独角兽企业重金招聘Python工程师标准>>> 设计模式是许多开发场景中的首选解决方案&#xff0c;本文将介绍五种经典的智能合约设计模式并给出以太坊solidity实现代码&#xff1a;自毁合约、工厂合约、名称注册表、映射表迭代器和提款模式。 1、自毁合约 合约自毁…

如何使用1Password,Authy和Privacy.com外包您的在线安全性

Take some work off your plate while beefing up security with three changes you can make today.通过今天可以进行的三项更改来增强安全性&#xff0c;同时省下一些工作。 Unstable times are insecure times, and we’ve already got enough going on to deal with. When…

「CodePlus 2017 12 月赛」火锅盛宴

n<100000种食物&#xff0c;给每个食物煮熟时间&#xff0c;有q<500000个操作&#xff1a;在某时刻插入某个食物&#xff1b;查询熟食中编号最小的并删除之&#xff1b;查询是否有编号为id的食物&#xff0c;如果有查询是否有编号为id的熟食&#xff0c;如果有熟食删除之…

5815. 扣分后的最大得分

给你一个 m x n 的整数矩阵 points &#xff08;下标从 0 开始&#xff09;。一开始你的得分为 0 &#xff0c;你想最大化从矩阵中得到的分数。 你的得分方式为&#xff1a;每一行 中选取一个格子&#xff0c;选中坐标为 (r, c) 的格子会给你的总得分 增加 points[r][c] 。 然…

您有一个上云锦囊尚未领取!

前期&#xff0c;我们通过文章《确认过眼神&#xff1f;上云之路需要遇上对的人&#xff01;》向大家详细介绍了阿里云咨询与设计场景下的五款专家服务产品&#xff0c;企业可以通过这些专家服务产品解决了上云前的痛点。那么&#xff0c;当完成上云前的可行性评估与方案设计后…

怎么从运营转到前端开发_我如何在16个月内从销售人员转到前端开发人员

怎么从运营转到前端开发On August 18, 2015, I was on a one-way flight headed to Copenhagen from Toronto Pearson Airport. I was starting my two semester exchange at the Copenhagen Business school. 2015年8月18日&#xff0c;我乘坐单程飞机从多伦多皮尔逊机场前往哥…

Python os.chdir() 方法

概述 os.chdir() 方法用于改变当前工作目录到指定的路径。 语法 chdir()方法语法格式如下&#xff1a; os.chdir(path) 参数 path -- 要切换到的新路径。 返回值 如果允许访问返回 True , 否则返回False。 实例 以下实例演示了 chdir() 方法的使用&#xff1a; #!/usr/bin/pyth…

oracle认证考试_Oracle云认证–通过此3小时免费课程通过考试

oracle认证考试This Oracle Cloud Certification exam will take – on average – about one week of study to prepare for. Most people who seriously commit to their studies are ready to pass the exam within about four days.这项Oracle Cloud认证考试平均需要大约一…