文件上传下载,与传统的方式不同,这里能够上传和下载10G以上的文件。而且支持断点续传。

通常情况下,我们在网站上面下载的时候都是单个文件下载,但是在实际的业务场景中,我们经常会遇到客户需要批量下载的场景,还有文件夹的下载场景。与传统业务需求相比,新的业务需求要求更高,难度也更大。但是用户体验比传统应用场景更好,更加符合用户的实际需求。

第一点:系统的配置

第二点:系统路径的配置,将所有的路径统一配置,在子页面只需要引用即可,不需要再反复引用

文件初始化服务端处理逻辑

文件上传上处理程序,处理服务器返回的数据信息

2.在Jsp页面中进行引用该Java类:

​\

第三点:struts2实现文件的上传和下载

第一步:在WEB-INF/lib下加入commons-fileupload-1.2.1.jar、commons-io-1.3.2.jar。这两个文件可以从http://commons.apache.org/下载。

第二步:把form表的enctype设置为:“multipart/form-data“,如下:

Java代码

下载的参数接收及初始化部分

后面便是我们实际的下载逻辑

注:一个表单里的文件域对应Action中三个属性,分别是文件,文件名,文件类型,命名是固定的,文件名必须表单中的文件域名称相同(uploadImage),文件名为:文件+FileName,文件类型:文件+ContentType。

第四步:将我们的上传Action配置到struts.xml中。

<action name="upload" class="com.gqy.UploadAction">

<param name="savePath">/uploadFile</param>

<result>/success.jsp</result>  </action>

注:指定上传文件的在服务器上的保存目录,需要在UploadAction中为定义savePath变量并为其添加相应的setter和getter方法,便于Struts2将/uploadFile值赋给savePath属性,即要想在UploadAction中使用savePath变量必须在UploadAction定义。

配置文件过滤类型:

<param name="allowTypes">       image/bmp,image/png,image/gif,image/jpeg   </param>

手动配置文件大小限制

<param name="maximumSize">1048576</param>

使用Struts2的文件上传拦截器实现文件过滤

前台引入全局路径

前台脚本逻辑部分

前台JS业务逻辑实现部分

Struts2提供了一个文件上传的拦截器—fileUpload,通过配置该拦截器可以方便实现上传文件的过滤。

配置fileUpload拦截器时,可以为其指定两个参数:

§ allowedTypes:指定允许上传的文件类型,多个文件类型之间以英文逗号(,)隔开。

§ maximumSize:指定允许上传的文件大小,单位是字节。

提示:通过配置fileUpload拦截器,可以轻松的实现文过滤,当文件过滤失败后,系统自动转入input逻辑视图,因此必须为该Action配置名为input的逻辑视图,除此之外,还必须显示地为该Action配置defaultStack的拦截器引用。

当用户上传失败后,需要有一定的提示信息。在Struts2中,使用<s:fielderror/>标签即可将错误提示信息输出到页面中。

注:要想使用Struts2错误提示信息,则上传文件的Action类,必须继承ActionSupport,否则Struts2不会提供输出错误提示信息功能。

我们可以配置资源文件(.properties)来保存输出给用户的信息。

struts.messages.eror.file.too.large:当上传文件大小超过设定的值时,Struts2将输出该key对应的提示信息。

struts.messages.error.content.type.not.allowed:当上传文件类型不符合设定的值时,Struts2将输出该key对应的提示信息。

struts.messages.error.uploading:当上传文件时出现未知错误时,Struts2将输出该key对应的提示信息。

我们还要将资源文件配置到struts.xml文件中,接下来看看我们的资源文件,已经包含中文了,得把它进行一下转换再配置到工程中。

在struts.xml中设定资源文件:

<constant name="struts.custom.i18n.resources" value="messages"/>或

<constant name="struts.custom.i18n.resources" value="messages_zh_CN"/>

用命令native2ascii  d:\messages.properties d:\messages_zh_CN.properties将原有的资源文件转换成支持中的。

注:保持国际化,资源文件的名称后缀为: *_zh_CN+文件扩展名的形式。

对于多个文件上传的原理同上,但是需要注意的是,多个文件域的name属性名必须相同,而且在Action中应该使用File [] 或者List<File>来接收。

个人觉得用这样的方式进行多个文件上传不是很好。

Struts2进行文件下载:

Struts2提供了stream结果类型,该结果类型专门用于支持文件下载的功能。当指定stream结果类型时,需要配置一个inputName参数,该参数指定了一个输入流,这个输入流是被下载文件的入口(即通过该入口才能实现文件以流的方式实现下载)。

后端代码逻辑大部分是相同的,目前能够支持MySQL,Oracle,SQL。在使用前需要配置一下数据库,可以参考我写的这篇文章:http://blog.ncmem.com/wordpress/2019/08/12/java-http%E5%A4%A7%E6%96%87%E4%BB%B6%E6%96%AD%E7%82%B9%E7%BB%AD%E4%BC%A0%E4%B8%8A%E4%BC%A0/

JSP文件的上传和下载的更多相关文章

  1. jsp+servlet实现文件的上传和下载

    实现文件的上传和下载首先需要理解几个知识,这样才可以很好的完成文件的上传和下载: (1):上传文件是上传到服务器上,而保存到数据库是文件名 (2):上传文件是以文件转换为二进制流的形式上传的 (3): ...

  2. 在SpringMVC框架下实现文件的 上传和 下载

    在eclipse中的javaEE环境下:导入必要的架包 web.xml的配置文件: <?xml version="1.0" encoding="UTF-8" ...

  3. 初学Java Web(7)——文件的上传和下载

    文件上传 文件上传前的准备 在表单中必须有一个上传的控件 <input type="file" name="testImg"/> 因为 GET 方式 ...

  4. java web(四):request、response一些用法和文件的上传和下载

    上一篇讲了ServletContent.ServletCOnfig.HTTPSession.request.response几个对象的生命周期.作用范围和一些用法.今天通过一个小项目运用这些知识.简单 ...

  5. java实现文件的上传和下载

    1. servlet 如何实现文件的上传和下载? 1.1上传文件 参考自:http://blog.csdn.net/hzc543806053/article/details/7524491 通过前台选 ...

  6. Spring MVC 实现文件的上传和下载

    前些天一位江苏经贸的学弟跟我留言问了我这样一个问题:“用什么技术来实现一般网页上文件的上传和下载?是框架还是Java中的IO流”.我回复他说:“使用Spring MVC框架可以做到这一点,因为Spri ...

  7. 文件的上传和下载--SpringMVC

    文件的上传和下载是项目开发中最常用的功能,例如图片的上传和下载.邮件附件的上传和下载等. 接下来,将对Spring MVC环境中文件的上传和下载进行详细的讲解. 一.文件上传 多数文件上传都是通过表单 ...

  8. java 文件的上传和下载

    主要介绍使用 smartupload.jar 包中的方法对文件的上传和下载.上传时文件是存放在服务器中,我用的是tamcat. 首先建立一个servlet 类,对文件的操作 package com.d ...

  9. JavaWeb中文件的上传和下载

    JavaWeb中文件的上传和下载 转自: JavaWeb学习总结(五十)——文件上传和下载 - 孤傲苍狼 - 博客园https://www.cnblogs.com/xdp-gacl/p/4200090 ...

随机推荐

  1. vue-router实现组件间的跳转---参数传递

    四.通过VueRouter来实现组件之间的跳转:参数的传递 login ---用户名--->main ①明确发送方和接收方②配置接收方的路由地址 {path:'/myTest',componen ...

  2. cocos2dx基础篇(12) 编辑框之一CCTextFieldTTF

    前面我们讲了精灵贴图.标签.菜单.按钮.感觉似乎少了点什么?UI控件里是不是应该还有一个很重要的控件--编辑框.在手机网游中,启动游戏,过了开场动画后,基本上显示的第一个界面应该就是游戏的登录界面了吧 ...

  3. python调用Java方法传入HashMap ArrayList

    1.Java代码: package com; import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap ...

  4. jeecg项目将workbook 的Excel流添加到zip压缩包里导出

    1.直接献出代码 Map<String,List<ConfidentialInformation>> typeMap = new HashMap<>(); try ...

  5. ubuntu/如何启动、关闭和设置ubuntu防火墙

    由于LInux原始的防火墙工具iptables过于繁琐,所以ubuntu默认提供了一个基于iptable之上的防火墙工具ufw. ubuntu 9.10默认的便是UFW防火墙,它已经支持界面操作了.在 ...

  6. 20191112 Spring Boot官方文档学习(4.3)

    4.3.Profiles Spring Profiles提供了一种隔离部分应用程序配置并使之仅在某些环境中可用的方法.任何@Component,@Configuration或@Configuratio ...

  7. 红帽学习笔记[RHCSA] 第八课[Nice值、时间同步、RPM与Yum软件安装]

    第八课 nice值 什么是nice值 给进程设置的优先级就是nice.nice的范围是-20~20.nice值越小占用的系统资源就越多,就是这个进程不nice. 如何查看nice值 # 使用top命令 ...

  8. kubeadm初始化kubernetes集群

    有两种方式安装集群: 1.手动安装各个节点的各个组件,安装极其复杂困难. 2.使用工具:kubeadm kubeadm 是官方提供的专门部署集群的管理工具. 1. 在kubeadm下每个节点都需要安装 ...

  9. P1622释放囚犯

    这是一道绿题,是一道让人想用贪心但却是区间DP的题目,难倒了我这个蒟蒻. 这个题其实仔细观察是类似于石子合并的!合并石子的代价便是肉的数量,求最小代价.所以我们设dp[i][j]为释放第i个到第j个所 ...

  10. P5016龙虎斗

    这道题是2018年普及组的第二题,是一个模拟题. 首先计算出双方各自的势力,然后将增援的队伍势力加上,比较此时双方势力,并且作差,最后枚举将公平兵加在哪一个兵营.看似简单的题被我20分钟就写完了,但是 ...