Spring MVC中的文件下载

本文探讨了在Spring MVC中如何实现文件下载,包括通过HttpServlet和使用MVC方式,并着重解决了文件名中文乱码的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Spring MVC中的文件下载

1.利用HttpServlet进行文件下载

@RequestMapping("/rc")
@Controller
public class DemoController {

    @RequestMapping("/d1")
    public void m1(HttpServletRequest request, HttpServletResponse response) throws IOException {
//        获取文件流
        ServletContext context = request.getServletContext();
        InputStream inputStream = context.getResourceAsStream("/file/blog.png");
//        设置头部响应
//        防止浏览器直接打开
        response.setContentType("application/octet-stream");
 //        保证保存文件名默认为blog.png
        response.setHeader("Content-Disposition","attachment;filename=blog.png");
//        获取输出流
        ServletOutputStream outputStream = response.getOutputStream();
//        利用commons的文件流jar
        IOUtils.copy(inputStream,outputStream);
    }
}

2. 使用MVC风格进行文件下载

@RequestMapping("/rc")
@Controller
public class DemoController {
    @Autowired
    private WebApplicationContext context;
    @RequestMapping("/d2")
    public ResponseEntity<Byte[]> m2() throws IOException {
//        拿到ServletContext对象
        ServletContext servletContext = context.getServletContext();
//        获取文件全路径
        String realPath = servletContext.getRealPath("/file/blog.png");
        File  file = new File(realPath);
//        利用FileUtils将文件转换成byte数组
        byte[] input=FileUtils.readFileToByteArray(file);
//        设置响应头和响应参数
        HttpHeaders headers = new HttpHeaders();
        headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);
        headers.add("Content-Disposition","attachment;filename=blog.png");
//        直接将数据返回浏览器ResponseEntity进行解析,状态码设置为ok
        return new ResponseEntity(input,headers,HttpStatus.OK);
    }
}

文件下载时还涉及默认显示文件名中文乱码的问题,具体设置:
文件下载案例实现

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值