开发者社区> jclian91> 正文

Spring Boot入门(11)实现文件下载功能

简介:   在这篇博客中,我们将展示如何在Spring Boot中实现文件的下载功能。   还是遵循笔者写博客的一贯风格,简单又不失详细,实用又能让你学会。
+关注继续查看

  在这篇博客中,我们将展示如何在Spring Boot中实现文件的下载功能。
  还是遵循笔者写博客的一贯风格,简单又不失详细,实用又能让你学会。
  本次建立的Spring Boot项目的主要功能为文件下载,而且这也是唯一功能,当然,作为例子,要尽可能简单,所以,功能简化为只下载E盘music_eg目录下的某一个文件。
  该Spring Boot项目的名称为file_download,其具体结构如下:


项目结构

build.gradle文件的代码如下:

buildscript {
    ext {
        springBootVersion = '2.0.3.RELEASE'
    }
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
    }
}

apply plugin: 'java'
apply plugin: 'eclipse'
apply plugin: 'org.springframework.boot'
apply plugin: 'io.spring.dependency-management'

group = 'com.example'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = 1.8

repositories {
    mavenCentral()
}


dependencies {
    compile('org.springframework.boot:spring-boot-starter-web')
    testCompile('org.springframework.boot:spring-boot-starter-test')
}

我们只需要创建一个控制器(Controler)文件,即Controller目录下的File_Download.java,其完整目录如下:

package com.example.file_download.Controller;

import java.io.*;
import java.net.URLEncoder;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
public class File_Download {

    //实现Spring Boot 的文件下载功能,映射网址为/download
    @RequestMapping("/download")
    public String downloadFile(HttpServletRequest request,
                               HttpServletResponse response) throws UnsupportedEncodingException {

        // 获取指定目录下的第一个文件
        File scFileDir = new File("E://music_eg");
        File TrxFiles[] = scFileDir.listFiles();
        System.out.println(TrxFiles[0]);
        String fileName = TrxFiles[0].getName(); //下载的文件名

        // 如果文件名不为空,则进行下载
        if (fileName != null) {
            //设置文件路径
            String realPath = "E://music_eg/";
            File file = new File(realPath, fileName);

            // 如果文件名存在,则进行下载
            if (file.exists()) {

                // 配置文件下载
                response.setHeader("content-type", "application/octet-stream");
                response.setContentType("application/octet-stream");
                // 下载文件能正常显示中文
                response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(fileName, "UTF-8"));

                // 实现文件下载
                byte[] buffer = new byte[1024];
                FileInputStream fis = null;
                BufferedInputStream bis = null;
                try {
                    fis = new FileInputStream(file);
                    bis = new BufferedInputStream(fis);
                    OutputStream os = response.getOutputStream();
                    int i = bis.read(buffer);
                    while (i != -1) {
                        os.write(buffer, 0, i);
                        i = bis.read(buffer);
                    }
                    System.out.println("Download the song successfully!");
                }
                catch (Exception e) {
                    System.out.println("Download the song failed!");
                }
                finally {
                    if (bis != null) {
                        try {
                            bis.close();
                        } catch (IOException e) {
                            e.printStackTrace();
                        }
                    }
                    if (fis != null) {
                        try {
                            fis.close();
                        } catch (IOException e) {
                            e.printStackTrace();
                        }
                    }
                }
            }
        }
        return null;
    }

}

这样我们就完成了Spring Boot的文件下载功能。什么?这样就搞定了?是的,就是这么简单,因为只实现了文件下载功能。具体的代码留给读者好好分析哦~~
  写完代码并不是我们的最终目的,我们还差最后一步,那就是测试!测试,真的相当重要啊~
  运行Spring Boot项目后,在浏览器中输入:http://localhost:8080/download , 你会发现什么?那就是你的浏览器已经开始下载E盘music_eg目录下的某一个文件啦(前提是E盘中存在music_eg目录,当然里面还得有文件,本例仅作为测试),如下图所示:


文件下载

  我们再去查看E盘music_eg目录,如下:


E盘music_eg目录

  So, 用Spring Boot实现文件下载功能搞定!欢迎大家交流哦~

注意:本人现已开通两个微信公众号: 因为Python(微信号为:python_math)以及轻松学会Python爬虫(微信号为:easy_web_scrape), 欢迎大家关注哦~~

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
Spring之IOC和DI入门案例
Spring之IOC和DI入门案例
14 0
【Java框架型项目从入门到装逼】第二节 - Spring框架 AOP的丧心病狂解说,你喜欢露娜的月下无限连吗?
【Java框架型项目从入门到装逼】第二节 - Spring框架 AOP的丧心病狂解说,你喜欢露娜的月下无限连吗?
51 0
【Java框架型项目从入门到装逼】第一节 - Spring框架 IOC的丧心病狂解说,来一波神的视角
【Java框架型项目从入门到装逼】第一节 - Spring框架 IOC的丧心病狂解说,来一波神的视角
20 0
优质资源分享 | Spring Boot 入门到放弃!!!
优质资源分享 | Spring Boot 入门到放弃!!!
14 0
Spring cloud应该怎么入门?(图文,很详细)下
Spring cloud应该怎么入门?(图文,很详细)下
54 0
Spring cloud应该怎么入门?(图文,很详细)上
Spring cloud应该怎么入门?(图文,很详细)上
34 0
Spring+SpringMVC+MyBatis整合Druid之入门
Spring+SpringMVC+MyBatis整合Druid之入门
113 0
Shiro整合Spring实现登录验证和授权之入门
Shiro整合Spring实现登录验证和授权之入门
49 0
《Spring Cloud Alibaba 从入门到实战》电子版地址
《Spring Cloud Alibaba 从入门到实战》是 Spring Cloud Alibaba 训练营的总结,书籍涵盖从基础知识到具体技术的讲解,从要点到实践,让你也能从入门到实战。
128 0
Dubbo3 入门实践:如何使用 Spring Boot 方式快速开发 Dubbo 应用
> 示例演示了如何使用 Spring Boot 方式快速开发 Dubbo 应用 > Dubbo 还提供了包括[XML](../../reference-manual/config/xml)、[API](../../reference-manual/config/api)等多种启动与接入方式,更多开发方式和配置细节可参见[配置手册](../../reference-manual/config/)。
118 0
+关注
jclian91
热爱算法,热爱技术,热爱生活,期待更好的自己与明天~
文章
问答
视频
文章排行榜
最热
最新
相关电子书
更多
阿里特邀专家徐雷Java Spring Boot开发实战系列课程(第18讲):制作Java Docker镜像与推送到DockerHub和阿里云Docker仓库
立即下载
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
相关实验场景
更多