0


Spring MVC:文件的上传与下载

Spring MVC

在这里插入图片描述

前言

文件的上传与下载是项目开发中最常用的功能之一。在 JavaWeb 中,文件上传与下载的实现是比较繁琐的。而 Spring MVC 实现文件上传与下载是相对比较简单的。

文件上传

简单示例:
首先,在 pom.xml 中配置以下依赖

<!-- https://mvnrepository.com/artifact/commons-fileupload/commons-fileupload --><dependency><groupId>commons-fileupload</groupId><artifactId>commons-fileupload</artifactId><version>1.2.1</version></dependency><!-- https://mvnrepository.com/artifact/commons-io/commons-io --><dependency><groupId>commons-io</groupId><artifactId>commons-io</artifactId><version>2.0</version></dependency>

接着,创建文件上传的页面 fileupload.jsp

<%--
  Created by IntelliJ IDEA.
  User: dell
  Date: 2023/8/8
  Time: 23:14
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" pageEncoding="UTF-8" %>
<html><body>
    <%-- 表单的 method 和 enctype 属性值必须:post 和 multipart/form-data --%>
    <formaction="${pageContext.request.contextPath}/fileupload"method="post"enctype="multipart/form-data">
        文件描述:<inputtype="text"name="describe"><br>
        请选择文件:<inputtype="file"name="fileupload"><br><inputtype="submit"value="上传"></form></body></html>

然后,创建上传文件的处理方法

packagecn.edu.springmvcdemo.controller;importorg.springframework.stereotype.Controller;importorg.springframework.web.bind.annotation.RequestMapping;importorg.springframework.web.bind.annotation.RequestMethod;importorg.springframework.web.bind.annotation.RequestParam;importorg.springframework.web.multipart.MultipartFile;importjavax.servlet.http.HttpServletRequest;importjava.io.File;importjava.io.IOException;@ControllerpublicclassFileLoadDemo{@RequestMapping("/fileupload")publicStringfileupload(){return"fileupload";}@RequestMapping(value ="/fileupload",method =RequestMethod.POST)publicStringfileuploadTest(@RequestParam("describe")String describe,@RequestParam("fileupload")MultipartFile fileupload,HttpServletRequest request)throwsIllegalStateException,IOException{System.out.println("文件描述信息:"+ describe);System.out.println("文件信息:"+ fileupload);//判断有文件上传,指定文件上传的路径if(!fileupload.isEmpty()){//文件保存的绝对路径String path = request.getServletContext().getRealPath("/resources/fileupload");System.out.println("path == "+ path);//获取上传的文件原名称String fileName = fileupload.getOriginalFilename();File file =newFile(path,fileName);//判断路径是否存在,若不存在,则创建if(!file.getParentFile().exists()){
                file.getParentFile().mkdirs();}//将上传文件保存到一个目标文件中
            fileupload.transferTo(file);}return"redirect:/fileupload";}}

最后,还需要在 springmvc.xml 配置文件中配置以下内容,再测试结果

<!-- 配置文件上传 --><beanid="multipartResolver"class="org.springframework.web.multipart.commons.CommonsMultipartResolver"><!-- 上传文件大小上限,单位为字节 --><propertyname="maxUploadSize"><!-- 限定为10MB --><value>10485760</value></property><!-- 配置请求编码格式,必须与 JSP 中的 pageEncoding 属性值一致,默认为 ISO-8859-1 --><propertyname="defaultEncoding"value="UTF-8"/></bean>

结果如图:
1.选择上传的文件并描述,点击上传
在这里插入图片描述
2.控制台打印信息如图:
在这里插入图片描述
3.根据 path 路径,获取上传的文件如图:
在这里插入图片描述

文件下载

简单示例:
在上面案例的 controller 类上添加以下处理方法即可

@RequestMapping(value ="/filedownloadTest")publicResponseEntity<byte[]>filedownloadTest(HttpServletRequest request,@RequestParam("fileName")String fileName,Model model)throwsIOException{//文件下载路径String path = request.getServletContext().getRealPath("/resources/fileupload/");File file =newFile(path,fileName);HttpHeaders httpHeaders =newHttpHeaders();//下载中文名的文件,防止中文乱码String downloadFileName =newString(fileName.getBytes("UTF-8"),"ISO-8859-1");//指定浏览器以 attachment(下载方式) 打开
    httpHeaders.setContentDispositionFormData("attachment",downloadFileName);//常见的文件下载:二进制流数据
    httpHeaders.setContentType(MediaType.APPLICATION_OCTET_STREAM);returnnewResponseEntity<byte[]>(FileUtils.readFileToByteArray(file),httpHeaders,HttpStatus.CREATED);}

测试结果
1.输入地址内容:/filedownloadTest?fileName=fileupload.txt
在这里插入图片描述
2.结果如图:
在这里插入图片描述


本文转载自: https://blog.csdn.net/qq_56886142/article/details/132176550
版权归原作者 啊Q老师 所有, 如有侵权,请联系我们删除。

“Spring MVC:文件的上传与下载”的评论:

还没有评论