spring mvc文件下载,因配置json转换,自动将ResponseEntity转为json导致无法下载

  • 首先我们需要保证项目是一个SpringMVC的项目,spring相关的jar包依赖都存在,另外我们的项目中必须有一个目录来存放需要下载的文件,如下图所示的download目录下有我们需要下载的文件。

    SpringMVC文件下载(导出)功能开发

    SpringMVC文件下载(导出)功能开发

  • 接下来我们需要编写一个文件下载的Controller,我们使用Rest风格的请求。首先创建一个download方法,返回值类型为ResponseEntity,请求的路径为/download,请求方法为Post请求,前端将需要下载的文件名传到后端,参数名为fileName,后端使用@RequestParam来接收。接下来我们需要获取要下载的文件的路径,我们使用已经封装好的方式来获取,当然也可以使用Servlet原生的HttpServletRequest request来获取上下文,在获取其中的下载路径。我们根据文件名和路径创建File类型的对象,同时创建HttpHeader,如下图所示。

    SpringMVC文件下载(导出)功能开发

  • 接下来我们需要修改文件名的编码格式,以解决下载显示的中文名称乱码问题,HttpHeader需要通知浏览器以attachment(下载方式)打开文件,另外我们需要设置MediaType,即Internet Media Type(互联网媒体类型),也叫做MIME类型。接下啦便是将文件的内容读到内存中,使用byte[]数组来存放,我们将文件读到内存中后便可以删除文件了,以免下载的文件在本地积压。HttpStatus类型代表的是Http协议中的状态,最后将byte[]数组,header和HttpStatus封装成ResponseEntity返回给前端,注意整个Controller只需要使用一个@Controller注解即可,不需要在方法上使用@Response注解或者使用组合注解@RestController。

    SpringMVC文件下载(导出)功能开发

  • 代码部分比较简单,由于整个项目是Rest风格的,前后端交互使用的都是json,因此我们需要在Spring配置文件中配置消息类型转换,将消息类型转成ByteArray必须要加在转换成json返回之前,如下图所示。

      <bean class="org.springframework.http.converter.ByteArrayHttpMessageConverter">

        </bean>

    SpringMVC文件下载(导出)功能开发

  • 接下来我们在Sublime Text3中编辑前端的代码来测试下载功能,我们编写一个表单form为Post请求,如下图所示,在浏览器中打开来测试下载功能。

    SpringMVC文件下载(导出)功能开发

  • 6

    浏览器打开的页面如下图所示,我们输入要下载的文件名,点击右侧的下载按钮即可,可以看到下图中文件已经被正确下载下来了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值