springboot下载文件功能

本文介绍如何使用SpringBoot实现文件下载功能,包括配置文件路径、选择字符流或字节流等关键步骤,并提供了一个具体的代码示例。

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

下载功能其实就是用户输入指定文件路径信息,然后把文件返回给用户。(不同于上传的概念)
同时需要考虑下文件的类型,从而选择使用字符流还是字节流操作,如果传输图片,用的是字符流,可能会造成文件内容缺失,毕竟是字符为单位传输的。无论什么文件,使用字节流肯定没错。

实现步骤

  1. pom文件中引入了springboot-tater-web依赖
  2. 新建cotroller类,其中的RequestMapping方法的方法参数中配置HttpServletResponse
  3. 方法中实现读取服务器文件流操作类,servlet写入流操作类。

完整代码

@RequestMapping("getFile")
@ResponseBody
public void getFile(HttpServletResponse response) throws Exception{
    File readFile = new File("/home/ssx/Music/CloudMusic/夜曲-周杰伦.flac");
    //字节流-用于读文件  这里只是demo用的非缓冲流。实际项目可以用BufferedInputStream。 此功能是读取图片,所以用的字节流。如果是文本的话可以用字符流效率高,具体类看下面注释
	//        BufferedReader bufferedReader = new BufferedReader(new FileReader(readFile));//字符流
    FileInputStream fileInputStream = new FileInputStream(readFile);//字节流
    //设置文件下载方式
    response.setHeader("content-disposition","attachment;filename="+ URLEncoder.encode("夜曲-周杰伦.flac","utf-8"));
    //获取servlet响应输出字节流
	//        PrintWriter writer = response.getWriter();//字符流
    ServletOutputStream outputStream = response.getOutputStream(); //字节流

    //流数据交换,每次交换10k数据大小 (1024k = 1m)
    byte[] bytes = new byte[1024*10];
    int read;
    do {
        read = fileInputStream.read(bytes);
        outputStream.write(bytes,0,read);
    }while (-1 != read);

    //关闭资源
    IOUtils.closeQuietly(fileInputStream);
    IOUtils.closeQuietly(outputStream);
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值