猿问
下载APP

使用a标签进行下载excel文件,打开下载后的文件内容为空,这是为什么?

前端代码:

<a :href="'/api/down-api/down'" download="down.xlsx">下载</a>

后端代码:

接口:

@ApiOperation(value = "下载")
@GetMapping("/down")
public void downTemplate(HttpServletResponse response) {
    String fileName = "down.xlsx";
    couponService.down(response, fileName);
}

实现类:

public void down(HttpServletResponse response ,String filename) {
    // 读取要下载的文件,保存到文件输入流
    FileInputStream in = null;
    OutputStream out = null;
    try {
        // 得到要下载的文件(文件存放在项目resources的static文件夹里)
        File file = new File("src\\main\\resources\\static" + "\\" + filename);
        // 如果文件不存在
        if (!file.exists()) {
            throw new BusinessException("Could not read file");
        }
        // 设置响应头,控制浏览器下载该文件
        response.setHeader("Content-Disposition", "attachment;filename="+filename);
        response.setHeader("Content-Type", "application/octet-stream;charset=UTF-8");
        response.setContentType("application/octet-stream");
        in = new FileInputStream(file);
        // 创建输出流
        out = response.getOutputStream();
        // 创建缓冲区
        byte buffer[] = new byte[1024];
        int len = 0;
        // 循环将输入流中的内容读取到缓冲区当中
        while ((len = in.read(buffer)) > 0) {
            // 输出缓冲区的内容到浏览器,实现文件下载
            out.write(buffer, 0, len);
        }
        // 关闭文件输入流
        in.close();
        // 关闭输出流
        out.close();
    } catch (Exception e) {
        e.printStackTrace();
    }
}


慕沐1134704
浏览 546回答 1
1回答

cxxyjsj

后台报错了吗
打开App,查看更多内容
随时随地看视频慕课网APP
我要回答