前后端完全分离之文件下载

本文详细介绍了如何在前后端分离的架构下实现文件下载功能。后端使用SpringBoot框架,通过Controller接收请求,调用Service层进行逻辑处理,并利用工具类完成文件的实际下载。前端则通过form表单提交POST请求触发下载。文章涵盖了从接口设计到具体实现的全过程。
摘要由CSDN通过智能技术生成

介绍前后端分离的文件下载

 

后台部分(springboot框架)

1.controller层

@RestController
@CrossOrigin
@RequestMapping("/pro")

public class ProController {

 

@PostMapping("/downloadFile")
@ApiOperation("下载文件")
public ResultVO downloadFile(
        HttpServletResponse response) {
    return proService.downloadFile(response);
}

}

 

2.service层

@Override
public ResultVO downloadFile(HttpServletResponse response) {
  //逻辑处理和调用文件下载工具类
  ToolUtil.downloadFile(response, route);//前端
}

3.工具类

public class ToolUtil {

//下载文件 传入HttpServletResponse对象response 和 文件保存位置path
public static void downloadFile(HttpServletResponse response, String path) {

    try {
        response.setCharacterEncoding("UTF-8");
        //response.setContentType("application/force-download");//应用程序强制下载
        File file = new File(path);
        //如果文件不存在
        if (file == null || !file.exists()) {
            String msg = "文件不存在!";
            System.out.println(msg);
            PrintWriter out = response.getWriter();
            out.write(msg);
            out.flush();
            out.close();
            return;
        }

        String simpleName = file.getName().substring(file.getName().lastIndexOf("/") + 1);
        String newFileName = new String(simpleName.getBytes(), "utf-8");
        response.setHeader("Content-disposition", "attachment;filename=" + newFileName);
        BufferedInputStream bis = new BufferedInputStream(
                new FileInputStream(file));
        BufferedOutputStream bos = new BufferedOutputStream(
                response.getOutputStream());
        byte[] buffer = new byte[1024];
        int length;
        while ((length = bis.read(buffer)) != -1) {
            bos.write(buffer, 0, length);
        }
        if (bis != null)
            bis.close();
        if (bos != null)
            bos.close();
    } catch (UnsupportedEncodingException e) {
        e.printStackTrace();
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
}
}

 

前台部分

调用这个方法,如果还需要添加其他参数,在form表单添加 <input />即可

function download(){
    var $eleForm = $("<form method='post'></form>");
    $eleForm.attr("action",https://ip:端口/ + "/pro/downloadFile");
     $(document.body).append($eleForm);
    $eleForm.submit();
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

cygcsdn

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值