我的编程空间,编程开发者的网络收藏夹
学习永远不晚

SpringMVC实现文件上传与下载

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

SpringMVC实现文件上传与下载

本文实例为大家分享了SpringMVC实现文件上传与下载的具体代码,供大家参考,具体内容如下

0.环境准备

1.maven依赖


<dependencies>
    <dependency>
      <groupId>org.junit.jupiter</groupId>
      <artifactId>junit-jupiter-api</artifactId>
      <version>5.7.0</version>
      <scope>test</scope>
    </dependency>


    <!-- servlet依赖 -->
    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>javax.servlet-api</artifactId>
      <version>3.1.0</version>
      <scope>provided</scope>
    </dependency>

    <!-- springMVC依赖 -->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-webmvc</artifactId>
      <version>5.2.6.RELEASE</version>
    </dependency>

    <!-- 文件上传的jar包 -->
    <dependency>
      <groupId>commons-io</groupId>
      <artifactId>commons-io</artifactId>
      <version>2.8.0</version>
    </dependency>
    <dependency>
      <groupId>commons-fileupload</groupId>
      <artifactId>commons-fileupload</artifactId>
      <version>1.3.3</version>
</dependency>

2.springConfig。xml配置文件


<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans.xsd
       http://www.springframework.org/schema/context
       https://www.springframework.org/schema/context/spring-context.xsd
       http://www.springframework.org/schema/mvc https://www.springframework.org/schema/mvc/spring-mvc.xsd">
    <!-- 开启组件扫描   -->
    <context:component-scan base-package="com.compass.file"></context:component-scan>

    <!--声明 配置springMVC视图解析器-->
    <bean  class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <!--前缀:视图文件的路径-->
        <property name="prefix" value="/WEB-INF/view/" />
        <!--后缀:视图文件的扩展名-->
        <property name="suffix" value=".jsp" />
    </bean>

    <!--读写JSON的支持(Jackson)-->
    <mvc:annotation-driven />

<!--  配置多媒体解析  -->
    <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<!--  配置字符编码集 -->
        <property name="defaultEncoding" value="utf-8"> </property>
<!-- 配置文件上传大小 单位是字节    -1代表没有限制 maxUploadSizePerFile是限制每个上传文件的大小,而maxUploadSize是限制总的上传文件大小  -->
        <property name="maxUploadSizePerFile" value="-1"> </property>

 <!-- ,不设置默认不限制总的上传文件大小,这里设置总的上传文件大小不超过1M(1*1024*1024) -->
        <property name="maxUploadSize" value="1048576"/>

    </bean>

</beans>

3.web.xml配置


<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">
  <!-- 声明springMvc的核心对象 DispatcherServlet -->
  <servlet>
    <servlet-name>web</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>classpath:springConfig.xml</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>web</servlet-name>
    <url-pattern>*.mvc</url-pattern>
  </servlet-mapping>

  <!--  注册字符集过滤器,解决post请求的中文乱码问题-->
  <filter>
    <filter-name>characterEncodingFilter</filter-name>
    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
    <init-param>
      <param-name>encoding</param-name>
      <param-value>utf-8</param-value>
    </init-param>
    <init-param>
      <param-name>forRequestEncoding</param-name>
      <param-value>true</param-value>
    </init-param>
    <init-param>
      <param-name>forResponseEncoding</param-name>
      <param-value>true</param-value>
    </init-param>

  </filter>
  <filter-mapping>
    <filter-name>characterEncodingFilter</filter-name>
    <url-pattern>
@Controller
public class UploadIFileController {

    // 处理单个文件上传
    @PostMapping("/uploadFile1.mvc")
     public ModelAndView uploadFile1(MultipartFile file, HttpSession session) throws IOException {

        ModelAndView view = new ModelAndView();
        // 得到文件名称
        String filename=file.getOriginalFilename();
        System.out.println("文件名称:"+filename);
        if (!file.isEmpty()){
            // 判断文件的后缀
            if (filename.endsWith(".jpg")||filename.endsWith(".png")||filename.endsWith(".txt"));
            //设置文件的保存路径
            String savePath="C:\\Users\\14823\\IdeaProjects\\springMVC\\fileupload\\class="lazy" data-src\\main\\webapp\\WEB-INF\\file";
            File class="lazy" data-srcFile = new File(savePath,filename);
            // 执行文件保存操作
            file.transferTo(class="lazy" data-srcFile);
            view.setViewName("forward:/uploadSuccess.jsp");
        }else {
            view.setViewName("forward:/uploadFailed.jsp");
        }
        return view;
    }

    // 处理多文件上传
    @PostMapping("/uploadFile2.mvc")
    public ModelAndView uploadFile2(MultipartFile[] file,HttpSession session) throws IOException {

        ModelAndView view = new ModelAndView();
        //设置文件的保存路径
        String savePath="C:\\Users\\14823\\IdeaProjects\\springMVC\\fileupload\\class="lazy" data-src\\main\\webapp\\WEB-INF\\file";
        String[] filenames = new String[file.length];
        // 只要上传过来的文件为空或者是不符合指定类型的都会上传失败
        for (int i = 0; i <filenames.length ; i++) {
            // 判断上传过来的文件是否为空
            if (!file[i].isEmpty()){
               String filename=file[i].getOriginalFilename();
               // 判断文件类型
               if (filename.endsWith(".txt")||filename.endsWith(".jpg")||filename.endsWith(".png")){
                   // 创建一个文件对象
                   File class="lazy" data-srcFile = new File(savePath, filename);
                   // 执行保存文件操作
                   file[i].transferTo(class="lazy" data-srcFile);
                   view.setViewName("forward:/uploadSuccess.jsp");
               }else {
                   view.setViewName("forward:/uploadSuccess.jsp");
               }

            }else {
                view.setViewName("forward:/uploadFailed.jsp");
            }

        }
        return view;
    }
}

2.文件下载

文件下分为两种情况:

  • 文件名称是纯英文字母的
  • 文件名带有中文不处理会乱码的

1.前端代码


<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>文件下载</title>
</head>
<body>
<h1 style="text-align: center"><a href="${pageContext.request.contextPath}/download1.mvc?filename=preview.jpg" rel="external nofollow" >文件下载(非中文名称)</a></h1>
<h1 style="text-align: center"><a href="${pageContext.request.contextPath}/download2.mvc?filename=文件下载.txt" rel="external nofollow" >文件下载(中文名称)</a></h1>
</body>
</html>

2.后端代码



@Controller
public class DownloadController {

    // 非中文名称文件下载
    @GetMapping("/download1.mvc")
    public ResponseEntity <byte[]> fileDownload1(String filename,HttpServletRequest request) throws IOException {

        String path="C:\\Users\\14823\\IdeaProjects\\springMVC\\fileupload\\class="lazy" data-src\\main\\webapp\\WEB-INF\\file\\";
        File file = new File(path,filename);
        HttpHeaders header = new HttpHeaders();
        header.setContentDispositionFormData("attachment",filename);
        header.setContentType(MediaType.APPLICATION_OCTET_STREAM);
        ResponseEntity<byte[]> result = new ResponseEntity<>(FileUtils.readFileToByteArray(file), header, HttpStatus.OK);
        return result;
    }

    // 中文名称文件下载
    @GetMapping("/download2.mvc")
    public ResponseEntity <byte[]> fileDownload2(String filename,HttpServletRequest request) throws IOException {

        System.out.println(filename);
        String path="C:\\Users\\14823\\IdeaProjects\\springMVC\\fileupload\\class="lazy" data-src\\main\\webapp\\WEB-INF\\file\\";
        filename = filename.replace("_", "%");
        filename= URLDecoder.decode(filename,"UTF-8");
        String downloadFile="";
        if (request.getHeader("USER-AGENT").toLowerCase().indexOf("msie")>0){
            filename= URLEncoder.encode(filename,"UTF-8");
            downloadFile=filename.replaceAll("+","%20");
        }else {
            downloadFile=new String(filename.getBytes("UTF-8"),"ISO-8859-1");
        }
        File file = new File(path,filename);
        HttpHeaders header = new HttpHeaders();
        header.setContentDispositionFormData("attachment",downloadFile);
        header.setContentType(MediaType.APPLICATION_OCTET_STREAM);
        ResponseEntity<byte[]> result = new ResponseEntity<>(FileUtils.readFileToByteArray(file), header, HttpStatus.OK);
        return result;
    }

}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程网。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

SpringMVC实现文件上传与下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

SpringMVC文件上传与下载怎么实现

这篇文章主要介绍“SpringMVC文件上传与下载怎么实现”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“SpringMVC文件上传与下载怎么实现”文章能帮助大家解决问题。前言文件上传是项目开发中最常
2023-07-04

SpringMVC如何实现文件上传下载

本篇内容主要讲解“SpringMVC如何实现文件上传下载”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“SpringMVC如何实现文件上传下载”吧!一、通用配置pom.xml
2023-06-22

springMVC怎么实现文件上传和下载

本篇内容介绍了“springMVC怎么实现文件上传和下载”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!本文实例为大家分享了springMVC
2023-06-20

SpringMVC如何使用ResponseEntity实现文件上传下载

本篇内容主要讲解“SpringMVC如何使用ResponseEntity实现文件上传下载”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“SpringMVC如何使用ResponseEntity实现文
2023-06-30

SpringMVC教程之文件上传与下载详解

本文将对使用MultipartResolver处理文件上传的步骤,两种文件下载方式(直接向response的输出流中写入对应的文件流、使用ResponseEntity<byte[]>来向前端返回文件)等进行详尽介绍,需要的可以参考一下
2022-12-08

nodejs multer实现文件上传与下载

本文实例为大家分享了nodejs实现文件上传下载的具体代码,供大家参考,具体内容如下 1.介绍 做了一个关于文件上传和下载的demo ,选择了Multer 作为中间件进行数据处理。 关于multer请参考中文翻译文档 https://git
2022-06-04

SpringMVC 单文件上传与多文件上传实例

一、简述一个javaWeb项目中,文件上传功能几乎是必不可少的,本人在项目开发中也时常会遇到,以前也没怎么去理它,今天有空学习了一下这方面的知识,于是便将本人学到的SpringMVC中单文件与多文件上传这部分知识做下笔记。二、单文件上传1、
2023-05-31

IE8+SpringMVC文件上传防止JSON下载

今天在IE8测试文件上传的时候发现总是提示下载,原因是上传接口返回的是json,通过以下修改就可以保证返回是json并且不会出现下载的情况:同时适用于当设置SPRING 视图解析器的时候,不能去掉@responseBody的问题@Reque
2023-05-31

详解SpringMVC如何实现文件上传和下载功能

小编这次要给大家分享的是详解SpringMVC如何实现文件上传和下载功能,文章内容丰富,感兴趣的小伙伴可以来了解一下,希望大家阅读完这篇文章之后能够有所收获。本文实例为大家分享了SpringMVC实现文件上传和下载的具体代码,供大家参考,具
2023-05-31

SpringMVC+Ajax如何实现文件批量上传和下载功能

小编给大家分享一下SpringMVC+Ajax如何实现文件批量上传和下载功能,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!上传form:
2023-06-08

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录