详解SpringMVC中的日期处理和文件上传操作

目录
  • 日期格式处理
  • 日期格式处理
  • 创建自定义日期转换器
  • 配置自定义转换器
  • 文件上传下载
  • 文件上传
  • 文件下载

日期格式处理

在控制器中使用对象接收数据

前端:

 <form action="test/add" method="post">
      <p>图书名称:<input type="text" name="bookName"/></p>
      <p>图书作者:<input type="text" name="bookAuthor"/></p>
      <p>图书价格:<input type="text" name="bookPrice"/></p>
      <p><input type="submit" value="提交"/></p>
  </form>

后端

@Controller
@RequestMapping("/test")
public class TestController {

    @RequestMapping("/add")
    //表单提交的多个数据,在控制器方法中可以使用对象接收
    //但是提交的数据的key必须要与对象的属性名一致
    public String addBook(Book book){
        return "/tips.jsp";
    }

}

日期格式处理

如果前端需要输入日期数据,在控制器中转换成Date对象,SpringMVC要求前端输入的日期格式必须为yyyy/MM/dd

如果甲方要求日期格式必须为指定的格式,而这个指定格式SpringMVC不接受,该如何处理呢?

自定义日期转换器

创建自定义日期转换器

/***
 * 1.创建一个类实现Converter接口,泛型指定从什么类型转换为什么类型
 * 2.实现convert转换方法
 */
public class MyDateConverter implements Converter<String, Date> {

    SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日");

    public Date convert(String s) {
        Date date = null;
        try {
            date = sdf.parse(s);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return date;
    }

}

配置自定义转换器

<!--  声明MVC使用注解驱动  -->
<mvc:annotation-driven conversion-service="converterFactory"/>

<bean id="converterFactory" class="org.springframework.format.support.FormattingConversionServiceFactoryBean">
    <property name="converters">
        <set>
            <bean class="com.qfedu.utils.MyDateConverter"/>
        </set>
    </property>
</bean>

文件上传下载

SpringMVC框架部署

基于Maven创建web工程

添加SpringMVC所需的依赖

Spring:context aspects jdbc test web webmvc jackson

创建SpringMVC配置文件

在web.xml中配置SpringMVC的前端控制器

在web.xml中配置SpringMVC的编码过滤器

配置springmvc静态资源处理策略

文件上传

案例:添加图书,同时提交图书的封面图片

前端提交文件

  • 表单提示方式必须为post
  • 表单enctype属性设置为multipart/form-data
<form action="book/add" method="post" enctype="multipart/form-data">
    <p>图书名称:<input type="text" name="bookName"/></p>
    <p>图书作者:<input type="text" name="bookAuthor"/></p>
    <p>图书价格:<input type="text" name="bookPrice"/></p>
    <p>图书封面:<input type="file" name="imgFile"/></p>
    <p><input type="submit" value="提交"/></p>
</form>

控制器接收数据和文件

SpringMVC处理上传文件需要借助于CommonsMultipartResolver文件解析器

添加依赖:commons-io commons-fileupload

<dependency>
     <groupId>commons-io</groupId>
     <artifactId>commons-io</artifactId>
     <version>2.4</version>
</dependency>
<dependency>
    <groupId>commons-fileupload</groupId>
    <artifactId>commons-fileupload</artifactId>
    <version>1.4</version>
</dependency>

在spring-servlet.xml中配置文件解析器

<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
    <property name="maxUploadSize" value="10240000"/>
    <property name="maxInMemorySize" value="102400"/>
    <property name="defaultEncoding" value="utf-8"/>
</bean>

控制器接收文件

在处理文件上传的方法中定义一个MultiPartFile类型的对象,就可以接受图片了

@Controller
@RequestMapping("/book")
public class BookController {

    @RequestMapping("/add")
    public String addBook(Book book, MultipartFile imgFile, HttpServletRequest request) throws IOException {
        System.out.println("--------------add");

        //imgFile就表示上传的图片
        //1.截取上传文件的后缀名,生成新的文件名
        String originalFilename = imgFile.getOriginalFilename();
        String ext = originalFilename.substring( originalFilename.lastIndexOf(".") );
        String fileName = System.currentTimeMillis()+ext;

        //2.获取imgs目录在服务器的路径
        String dir = request.getServletContext().getRealPath("imgs");
        String savePath = dir+"/"+fileName; 

        //3.保存文件
        imgFile.transferTo( new File(savePath));

        //4.将图片的访问路径设置到book对象
        book.setBookImg("imgs/"+fileName);

        //5.调用service保存book到数据库
        return "/tips.jsp";
    }

}

文件下载

显示文件列表

list.jsp

  <%@ page contentType="text/html;charset=UTF-8" language="java" %>
  <html>
      <head>
          <title>Title</title>
      </head>
      <!-- 最新版本的 Bootstrap 核心 CSS 文件 -->
      <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@3.3.7/dist/css/bootstrap.min.css" rel="external nofollow"  integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous">
      <!-- 可选的 Bootstrap 主题文件(一般不用引入) -->
      <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@3.3.7/dist/css/bootstrap-theme.min.css" rel="external nofollow"  integrity="sha384-rHyoN1iRsVXV4nD0JutlnGaslCJuC7uwjduW9SVrLvRYooPp2bWYgmgJQIXwl/Sp" crossorigin="anonymous">
      <!-- 最新的 Bootstrap 核心 JavaScript 文件 -->
      <script src="https://cdn.jsdelivr.net/npm/bootstrap@3.3.7/dist/js/bootstrap.min.js" integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa" crossorigin="anonymous"></script>
      <body>

      <h4>文件列表</h4>

      <div class="row" id="container"></div>

      <script type="text/javascript" src="js/jquery-3.4.1.min.js"></script>
      <script type="text/javascript">
          $.get("book/list",function(res){
              for (var i = 0; i < res.length; i++) {
                  var fn = res[i];
                  var htmlStr = "<div class='col-lg-2  col-md-3 col-sm-4 col-xs-6'><div class='thumbnail'><img src='imgs/"+fn+"' alt='...'> <div class='caption'><p><a href='#' class='btn btn-primary' role='button'>下载</a></p></div> </div> </div>";
                  $("#container").append(htmlStr);
              }
          },"json");
      </script>

      </body>
  </html>

BookController

@RequestMapping("/list")
@ResponseBody
public String[] listImgs(HttpServletRequest request){
    //从imgs目录下获取所有的图片信息
    String dir = request.getServletContext().getRealPath("imgs");
    File imgDir = new File(dir);
    String[] fileNames = imgDir.list();
    return fileNames;
}

实现文件下载

list.jsp

var htmlStr = "<div class='col-lg-2  col-md-3 col-sm-4 col-xs-6'><div class='thumbnail'><img src='imgs/"+fn+"' alt='...'> <div class='caption'><p><a href='book/download?fname="+fn+"' class='btn btn-primary' role='button'>下载</a></p></div> </div> </div>";

BookController

@RequestMapping("/download")
public void downloadImg(String fname, HttpServletRequest request, HttpServletResponse response) throws Exception {
    //从imgs目录找到当前文件
    String dir = request.getServletContext().getRealPath("imgs");
    String filePath = dir+"/"+fname;
    FileInputStream fileInputStream = new FileInputStream(filePath);

    response.setContentType("application/exe");
    response.addHeader("Content-Disposition","attachment;filename="+fname);

    IOUtils.copy(fileInputStream, response.getOutputStream());
}

以上就是详解SpringMVC中的日期处理和文件上传操作的详细内容,更多关于SpringMVC日期处理 文件上传的资料请关注我们其它相关文章!

(0)

相关推荐

  • springmvc实现文件上传功能

    一个简单的springmvc文件上传例子 所需的依赖 只需要这个就好了.在idea的依赖关系图中,commons-fileupload包含了commons-io依赖 <dependency> <groupId>commons-fileupload</groupId> <artifactId>commons-fileupload</artifactId> <version>1.3.2</version> </depen

  • Springmvc文件上传实现流程解析

    SpringMVC 中对文件上传做了封装,我们可以更加方便的实现文件上传.从 Spring3.1 开始,对于文件上传,提供了两个处理器: CommonsMultipartResolver StandardServletMultipartResolver 第一个处理器兼容性较好,可以兼容 Servlet3.0 之前的版本,但是它依赖了commons-fileupload 这个第三方工具,所以如果使用这个,一定要添加 commons-fileupload 依赖. 第二个处理器兼容性较差,它适用于 S

  • SpringMVC实现文件上传与下载

    本文实例为大家分享了SpringMVC实现文件上传与下载的具体代码,供大家参考,具体内容如下 0.环境准备 1.maven依赖 <dependencies> <dependency> <groupId>org.junit.jupiter</groupId> <artifactId>junit-jupiter-api</artifactId> <version>5.7.0</version> <scope&

  • SpringMVC中日期格式的转换

    解决日期提交转换异常的问题 由于日期数据有很多种格式,所以springmvc没办法把字符串转换成日期类型.所以需要自定义参数绑定.前端控制器接收到请求后,找到注解形式的处理器适配器,对RequestMapping标记的方法进行适配,并对方法中的形参进行参数绑定.在springmvc这可以在处理器适配器上自定义Converter进行参数绑定.如果使用<mvc:annotation-driven/>可以在此标签上进行扩展. 1.自定义DataConvertor类, 并实现Convertor接口 p

  • SpringMVC实现文件上传下载功能

    目录 导入需要的依赖包 一.单个文件上传 二.多个文件上传 三.上传文件列表显示 四.文件下载 今天遇到文件上传的问题,使用Ajax方式进行提交,服务器一直报错The current request is not a multipart request,看了网上很多方法,最后才找到,我在表单提交的时候使用了序列化$('#postForm').serialize(),但是这种方式,只能传递一般的参数,上传文件的文件流是无法被序列化并传递的.所以一直在报错.后来就直接使用submint(),放弃使用

  • SpringMVC深入讲解文件的上传下载实现

    目录 SpringMVC文件下载 SpringMVC文件上传 1.基本介绍 2.需求分析/图解 3.应用实例 4.Debug-file.transferTo(目标文件) SpringMVC文件下载 说明: 在 SpringMVC 中,通过返回 ResponseEntity的类型,可以实现文件下载的功能 案例演示 1.修改 json.jsp <h1>下载文件的测试 </h1> <a href="<%=request.getContextPath()%>/d

  • springmvc接收参数为日期类型

    用单个Date类型接收日期类型时,会出现报错,加上initBinder的方法 意思是将所有传入的参数都通过此方法,如果过是日期通过日期格式化器进行格式化 如果是接收类型为对象内的属性为Date类型时 直接在属性双加上注解,就可以进行转化日期格式

  • 详解SpringMVC中的日期处理和文件上传操作

    目录 日期格式处理 日期格式处理 创建自定义日期转换器 配置自定义转换器 文件上传下载 文件上传 文件下载 日期格式处理 在控制器中使用对象接收数据 前端: <form action="test/add" method="post"> <p>图书名称:<input type="text" name="bookName"/></p> <p>图书作者:<input

  • 详解springMVC两种方式实现多文件上传及效率比较

    springMVC实现多文件上传的方式有两种,一种是我们经常使用的以字节流的方式进行文件上传,另外一种是使用springMVC包装好的解析器进行上传.这两种方式对于实现多文件上传效率上却有着很大的差距,下面我们通过实例来看一下这两种方式的实现方式,同时比较一下在效率上到底存在着多大的差距. 1.下载相关jar包.需要引入的jar出了springMVC的jar包外,还需要引入com.springsource.org.apache.commons.fileupload-1.2.0.jar和com.s

  • JavaEE开发之SpringMVC中的自定义消息转换器与文件上传

    本篇博客我们继续的来聊SpringMVC的东西,下方我们将会聊到js.css这些静态文件的加载配置,以及服务器推送的两种实现方式.当然我们在服务器推送时,会用到jQuery的东西,所以我们先聊一下如何加载静态资源文件,然后我们再聊如何实现服务器推送. 下方给出了两种实现服务器推送的方式,一种是SSE(Server Send Event (服务端推送事件))另一种是基于Servlet异步处理的推送,下方会给出详细的实现方式,并且给出了两者的区别. 一.静态资源文件映射 静态资源文件映射在Sprin

  • 详解Java中的日期类

    Java 编程语言中时间的处理类有 Date类与 Calendar类.目前官方不推荐使用 Date类,因为其不利于国际化:而是推荐使用 Calendar类,并使用 DateFormat 类做格式化处理. 一.Date 类介绍 Date 表示特定的瞬间,精确到毫秒. 在 JDK 1.1 之前,类 Date 有两个其他的函数.它允许把日期解释为年.月.日.小时.分钟和秒值.它也允许格式化和解析日期字符串. 不过,这些函数的 API 不易于实现国际化.从 JDK 1.1 开始,应该使用 Calenda

  • 详解SpringMVC中的异常处理

    1. SpringMVC默认三个异常处理类 ExceptionHandlerExceptionResolver:处理@ExceptionHandler注解 ResponseStatusExceptionResolver:处理@ResponseStatus注解 DefaultHandlerExceptionResolver:处理SpringMVC自带的异常 如果以上3个异常解析器都无法处理,会上抛给tomcat,处理异常内部的默认工作流程:所有异常解析器依次尝试解析,解析完成进行后续操作,解析失败

  • 详解SpringMVC中拦截器的概念及入门案例

    目录 一.拦截器概念 二.拦截器入门案例 一.拦截器概念 拦截器(Interceptor)是一种动态拦截方法调用的机制,在SpringMVC中动态拦截控制器方法的执行 作用: 在指定的方法调用前后执行预先设定的代码 阻止原始方法的执行 拦截器与过滤器区别  归属不同:Filter属于Servlet技术,Interceptor属于SpringMVC技术 拦截内容不同:Filter对所有的访问进行增强,Interceptor仅针对SpringMVC的访问进行增强 二.拦截器入门案例 1.声明拦截器的

  • 详解SpringMVC中的异常处理机制

    目录 开头 1.ExceptionHandlerExceptionResolver 2. demo 开头 试想一下我们一般怎么统一处理异常呢,答:切面.但抛开切面不讲,如果对每一个controller方法抛出的异常做专门处理,那么着实太费劲了,有没有更好的方法呢?当然有,就是本篇文章接下来要介绍的springmvc的异常处理机制,用到了ControllerAdvice和ExceptionHandler注解,有点切面的感觉哈哈. 1.ExceptionHandlerExceptionResolve

  • 详解Visual Studio使用Git忽略不想上传到远程仓库的文件

    前言: 作为一个.NET开发者而已,有着宇宙最强IDE:Visual Studio加持,让我们的开发效率得到了更好的提升.我们不需要担心环境变量的配置和其他代码管理工具,因为VS有丰富的拓展工具.废话不多说,直接进入正题.我们日常在使用VS开发相关的.NET项目时,经常会发现刚拉取下拉的代码什么都没有改动,就是运行了一下就会产生一些需要提交的文件,比如说最常见的bin/Debug, bin/Release,obj/Debug,obj/Release文件.但是我不想把这些文件提交到远程的git代码

  • TP3.2.3框架文件上传操作实例详解

    本文实例讲述了TP3.2.3框架文件上传操作.分享给大家供大家参考,具体如下: 上传表单 在ThinkPHP中使用上传功能无需进行特别处理.例如,下面是一个带有附件上传的表单提交: <form action="__URL__/upload" enctype="multipart/form-data" method="post" > <input type="text" name="name"

  • PHP文件上传操作实例详解

    本文实例分析了PHP文件上传操作.分享给大家供大家参考,具体如下: 文件上传 发生在浏览器向服务器发出的请求中. 文件,对于浏览器来讲,就是表单中的一个特殊类型的数据而已. 浏览器表单中的数据,两种类型: 字符串类型(字节流编码) 文件类型(二进制编码),文件是表单数据中一部分 服务器角度: 在接受浏览器请求时,处理好表单内的数据.根据数据类型不同使用不同处理方法: 字符串类型,存储在$_POST变量中(内存) 文件型数据,存储在上传临时目录中 表单提交时,浏览器会默认的行为: 表单内的的内容都

随机推荐