页面代码:

<!DOCTYPE html>
<html lang="utf-8">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<head>
     <title>标题</title>
    </head>

     <body>
            <h2>It works!</h2>
            <a href="/downloadLocalXlsxFile">Local xlsx file download</a>
     </body>
</html>
<script type="text/javascript">
<!--
    // 脚本
//-->
</script>

后台代码:

package com.example.demo;

import java.io.FileInputStream;
import java.net.URLDecoder;

import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
@SpringBootApplication
public class SpringBootWeb1Application {

    public static void main(String[] args) {
        SpringApplication.run(SpringBootWeb1Application.class, args);
    }

    @RequestMapping("/")
    public String index() {
        return "index.html";
    }

    @RequestMapping("/downloadLocalXlsxFile")
    public void downloadLocalXlsxFile(HttpServletResponse res, HttpServletRequest req) throws Exception {
        String localFilename = "Book1.xlsx";
        String localFilepath = getClass().getResource("/templates/" + localFilename).getPath();

        res.setContentType("multipart/form-data");
        res.setCharacterEncoding("UTF-8");
        res.setContentType("text/html");

        String userAgent = req.getHeader("User-Agent");
        if (userAgent.contains("MSIE") || userAgent.contains("Trident")) {
            // IE Core
            localFilename = java.net.URLEncoder.encode(localFilename, "UTF-8");
        } else {
            // Non-IE Core
            localFilename = new String((localFilename).getBytes("UTF-8"), "ISO-8859-1");
        }
        res.setHeader("Content-Disposition", "attachment;fileName=" + localFilename);

        localFilepath = URLDecoder.decode(localFilepath, "UTF-8");
        FileInputStream instream = new FileInputStream(localFilepath);
        ServletOutputStream outstream = res.getOutputStream();
        int b = 0;
        byte[] buffer = new byte[1024];
        while ((b = instream.read(buffer)) != -1) {
            outstream.write(buffer, 0, b);
        }
        instream.close();

        if (outstream != null) {
            outstream.flush();
            outstream.close();
        }
    }
}

SpringBoot/SpringMVC 下载本地文件的更多相关文章

  1. flask 下载本地文件

    下载本地文件就是找到文件路径  调用flask自带的send_file(路径)下载, 并返回 flask: # 下载文件 from flask import send_file@task_mgm.ro ...

  2. SSH上传/下载本地文件到linux服务器

    在linux下一般用scp这个命令来通过ssh传输文件. 1.从服务器上下载文件 scp username@servername:/path/filename /var/www/local_dir(本 ...

  3. 如何从TFS(Visual Studio Team Foundation Server)映射下载本地文件夹

    1.连接tfs项目 首先打开vs2017 ——>工具栏 中的   团队——> 选择团队的管理链接 2.选择管理工作区 显示管理工作区的弹窗,点击 编辑  显示弹窗,选择本地文件夹(即要保存 ...

  4. XShell上传、下载本地文件到linux服务器

    Python之道发表于程序员八阿哥订阅 1.2K 腾讯云服务器 年付3折起 首次购买云服务器 最低3折起 超高性价比 限时抢购 Xshell很好用,然后有时候想在windows和linux上传或下载某 ...

  5. linux学习 XShell上传、下载本地文件到linux服务器

    (一)通过命令行的方式 1.linux服务器端设置 在linux主机上,安装上传下载工具包rz及sz; 如果不知道你要安装包的具体名称,可以使用yum provides */name 进行查找系统自带 ...

  6. java web 下载本地文件并弹出下载框

    window.open("/dept/download") jsp代码 @RequestMapping(value = "/download", method ...

  7. [SpringBoot/SpringMVC]从Webapp下载一个大文件出现java.lang.OutOfMemoryError: GC overhead limit exceeded怎么办?

    本文示例工程下载:https://files.cnblogs.com/files/xiandedanteng/WebFileDownload20191026.rar 制作一个Webapp,让其中一个网 ...

  8. Java传统下载和SpringMVC下载

    /** * 传统下载 * @param filename 文件名称 */ @RequestMapping(value="download", method={RequestMeth ...

  9. SpringMVC文件上传下载(单文件、多文件)

    前言 大家好,我是bigsai,今天我们学习Springmvc的文件上传下载. 文件上传和下载是互联网web应用非常重要的组成部分,它是信息交互传输的重要渠道之一.你可能经常在网页上传下载文件,你可能 ...

随机推荐

  1. linux centos Supervisor守护.netcore进程安装配置

    场景:当部署完.netcore程序后 使用dotnet xx.dll 后可以运行,但关闭shell或隔断时间会自动断开,此时部署的.netcore程序就不能访问了,此时需要用到Supervisor了 ...

  2. MySQL中SQL语句常见优化策略

    1.避免全表扫描 对查询进行优化,应尽量避免全表扫描,首先应考虑在where 及order by 涉及的列上建立索引. 2.避免判断null 值 应尽量避免在where 子句中对字段进行null 值判 ...

  3. 网络编程基础之TCP编程学习(一)

    网络编程基础了解 socket套接字 socket是一种通讯机制,它包含一整套的调用接口和数据结构的定义,他给应用程序提供了使用如TCP/UDP等网络通讯的手段. linux中的网络编程通过socke ...

  4. Linux开机启动项总结

    在应急响应时有时会遇到系统被植入后门,添加启动项等操作,如果不清楚启动项的话,可能会被黑客植入一些开机启动项,无法彻底清除后门程序,所以在这梳理下启动项的东西 1.操作系统接管硬件以后,首先读入 /b ...

  5. SQL Join 理解

    对各种连接的理解,可以参照文章. 下面是对连接结果表条数统计的思考:假设有主表Ta有5条记录,从表Tb有4条记录 Ta corss join Tb, 结果为2表做笛卡尔积,5*4=20条 /*下面其它 ...

  6. 关于python logging模块读文档的几个心得

    1. logger是分层级的,root是所有logger的祖先. 2. root这个logger在执行logging.warning() 等一系列方法和basicConfig()的时候才会被初始化ha ...

  7. Selenium(一)自动化测试简介

    1.软件开发流程 产品分析需求--架构师确认系统包含哪些模块--开发编码--开发和测试一起做单元测试--测试开展版本(集成)测试(使用手工测试,测试通过后,才开始设计脚本)--测试开展系统测试--最后 ...

  8. python大战EXCEL--xlwings

    xlwings的特色 xlwings能够非常方便的读写Excel文件中的数据,并且能够进行单元格格式的修改 可以和matplotlib以及pandas无缝连接 可以调用Excel文件中VBA写好的程序 ...

  9. node.js之文件读写模块,配合递归函数遍历文件夹和其中的文件

    fs.stat会返回文件夹会文件的属性 var fs = require('fs'); var wenwa = function (pathname,callback) { fs.stat(pathn ...

  10. CKEditor5 输入文字时拼音和汉字同时输入问题

    在使用 CKEditor5 + vue 时,出现输入文字时,拼音和文字一起输入到编辑器到问题.与之前项目中使用 ckeditor 的区别是,这次项目是在 python 架构下局部引入 ckeditor ...