SpringMVC实现文件上传与下载

1.文件上传
文件上传一般包括前端页面的文件选择、文件上传、后台接收文件、保存文件等步骤。

1.1 前端页面HTML代码示例

<form action="upload" method="post" enctype="multipart/form-data">
   <input type="file" name="file"/>
   <input type="submit" value="上传"/>
</form>

1.2 后台Controller代码示例

@Controller
public class FileUploadController {

    @RequestMapping(value="/upload", method=RequestMethod.POST)
    public String handleFileUpload(@RequestParam("file") MultipartFile file, HttpServletRequest request){
        try {
            String fileName = file.getOriginalFilename();
            String path = request.getSession().getServletContext().getRealPath("/upload/" + fileName);
            // 保存文件
            file.transferTo(new File(path));
            request.setAttribute("msg", "文件上传成功!");
        } catch (Exception e) {
            request.setAttribute("msg", "文件上传失败!");
        }
        return "fileupload";
    }
}

其中,@RequestParam("file")注解表示接收名字为file的文件,@RequestMapping(value="/upload", method=RequestMethod.POST)表示请求url为/upload,请求方法为POST。

1.3 文件上传结果展示HTML代码示例

<div style="text-align:center">
    <!-- 如果msg不为空,即为上传失败,添加红色字体颜色 -->
    <p style="${empty msg? 'color:#FF0011': ''}">${msg}</p>
    <img src="upload/${file.name}" alt="no image"/>
    <p>上传文件名字:${file.name}</p>
    <p>上传文件大小:${file.size}</p>
</div>

其中,${}表示引用传参进来的数据,upload/${file.name}表示文件上传之后保存的路径。

2.文件下载
文件下载与文件上传不同,文件下载只能从后台进行处理。一般包含前端页面的选择文件、请求后台数据、后台返回数据等步骤。

2.1 前端页面HTML代码示例

<a href="download?file=example.txt">下载文件</a>

其中,download?file=example.txt表示请求url,file表示后台根据该字段获取文件。

2.2 后台Controller代码示例

@Controller
public class FileDownloadController {

    @RequestMapping("/download")
    public ResponseEntity<byte[]> fileDownload(HttpServletRequest request) throws Exception{
        // 获取文件名,根据文件名从磁盘获取文件
        String fileName = request.getParameter("file");
        String downLoadPath = request.getSession().getServletContext().getRealPath("/upload/" + fileName);
        FileInputStream inputStream = new FileInputStream(new File(downLoadPath));

        // 将文件返回
        byte[] bytes = new byte[inputStream.available()];
        inputStream.read(bytes);
        HttpHeaders httpHeaders = new HttpHeaders();
        httpHeaders.setContentType(MediaType.APPLICATION_OCTET_STREAM);
        httpHeaders.setContentDispositionFormData("attachment", new String(fileName.getBytes("UTF-8"), "ISO-8859-1"));
        ResponseEntity<byte[]> responseEntity = new ResponseEntity<byte[]>(bytes, httpHeaders, HttpStatus.OK);
        inputStream.close();

        return responseEntity;
    }
}

其中,@RequestMapping("/download")表示请求url为/download。

2.3 文件下载结果展示HTML代码示例

文件下载在后台即可完成,无需前端页面展示。

以上即为SpringMVC实现文件上传与下载的完整攻略。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:SpringMVC实现文件上传与下载 - Python技术站

(0)
上一篇 2023年6月15日
下一篇 2023年6月15日

相关文章

  • java开发中如何使用JVisualVM进行性能分析

    完整攻略如下: 1. 什么是JVisualVM JVisualVM是Java SE平台的一个工具,用于监视本地或远程的Java程序运行状态。使用JVisualVM可以实时监控Java程序的内存、CPU、线程等实时状态,同时支持通过插件扩展功能。 2. 如何使用JVisualVM进行性能分析 2.1. 下载并安装JVisualVM JVisualVM是Java…

    Java 2023年5月26日
    00
  • 使用java数组 封装自己的数组操作示例

    使用Java数组,封装自己的数组操作是Java开发中比较常见的任务,本攻略将为您提供两个示例来说明如何封装自己的数组操作。 1. 实现数组反转的方法 在编写Java程序时,我们经常需要将数组进行反转。封装一个数组反转的方法是很有必要的。下面是一个代码示例: public static int[] reverse(int[] array){ int[] res…

    Java 2023年5月26日
    00
  • java实现的导出Excel工具类实例

    下面详细讲解一下如何使用Java实现导出Excel工具类。 实现思路 导出Excel的实现思路如下: 创建一个Workbook对象 创建Sheet对象 创建Row对象 创建Cell对象 设置单元格的值 保存Excel 实现步骤 1. 引入poi依赖 在项目的pom.xml文件中添加以下依赖: <dependency> <groupId&gt…

    Java 2023年5月26日
    00
  • 基于Lombok集成springboot遇到的坑

    好的。首先,Lombok是一款Java的插件工具库,它可以简化Java代码的编写,减少代码的重复,提高开发效率。Spring Boot是一款基于Spring框架的快速开发框架,在实现快速开发的同时也减少了很多繁琐的配置工作。将Lombok和Spring Boot进行集成,可以更快速地开发出高质量的Java应用。 但是,在集成Lombok和Spring Boo…

    Java 2023年5月26日
    00
  • java Spring整合Freemarker的详细步骤

    下面我将详细讲解Java Spring整合Freemarker的详细步骤。 简介 首先,需要了解什么是Freemarker和Spring。Freemarker是一种模版引擎,它允许我们在我们的应用程序中使用模版来生成动态内容。Spring是一个Java框架,它可以帮助我们更轻松地构建和管理Java应用程序的组件。 步骤 以下是整合Spring和Freemar…

    Java 2023年5月19日
    00
  • jsp中点击图片弹出文件上传界面及预览功能的实现

    要实现JSP中点击图片弹出文件上传界面及预览功能,可以采用以下步骤: 导入相关依赖库和设置表单 首先需要在JSP页面中导入相关的依赖库,比如jQuery、layer等,以及设置一个表单用于文件上传。示例代码如下: <head> <script src="https://cdn.bootcdn.net/ajax/libs/jquer…

    Java 2023年6月15日
    00
  • 使用JWT作为Spring Security OAuth2的token存储问题

    JWT(JSON Web Token)是一种允许在网络应用之间传递声明的开放标准。它可以通过签名保证数据的完整性,并建立信任关系,因此在身份验证和授权方面非常有用。在Spring Security框架中,我们可以使用JWT作为OAuth2的Token Store。 以下是使用JWT作为Spring Security OAuth2的Token Store的攻略…

    Java 2023年5月20日
    00
  • Java中的NoSuchFieldException是什么?

    NoSuchFieldException是Java中的一个异常,当找不到指定名称的字段或对象属性时会引发此异常。其名称源自NoSuchFieldError和NoSuchMethodError异常,它们也处理类和方法的找不到的问题。 在Java中,字段或属性是对象或类的一部分,它们用于存储或表示对象的状态。如果我们要读取或设置这些字段的值,通常使用反射技术。反…

    Java 2023年4月27日
    00
合作推广
合作推广
分享本页
返回顶部