SpringBoot实现文件上传下载

摘要:
前言本文主要介绍如何在SpringBoot中上传和下载文件。使用它后,版本标记--˃org。弹簧框架。boot</groupId><artifactId>spring boot starter parent</artifactId><version>2.1.3。RELEASEorg.springframework.bootspringfootstarterweborg.projectlomboklombok11.16.20application.yml添加配置服务器:port:8080sp ring:servlet:multipart:enabled:true#支持的最大文件大小最大文件-大小:100MB#支持的请求大小最大请求大小:100MB#文件存储路径文件路径:D:/file/可以修改文件存储路径。此处设置文件上载的大小限制。100Mcontroller层在controller文件夹下创建FileController。FileController在控制器文件夹下创建。因为这里只执行文件上传和下载,没有业务逻辑处理,所以只能在控制层实现,定义文件上传和文件下载的接口。目标文件。exists()){targetFile.mkdirs();}try{out.write;}catch{e.printStackTrace();log.error(“文件上传失败!”);return“上传失败”;}log。info(“文件上传成功!”!

前言

本篇文章主要介绍的是SpringBoot实现文件上传下载。

GitHub源码链接位于文章底部。

创建maven项目,在pom文件中添加依赖

<properties>
	<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
	<java.version>1.8</java.version>
	<maven.compiler.source>1.8</maven.compiler.source>
	<maven.compiler.target>1.8</maven.compiler.target>
</properties>

<!--父级依赖,它用来提供相关的 Maven 默认依赖。使用它之后,常用的springboot包依赖可以省去version 标签-->
<parent>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-parent</artifactId>
	<version>2.1.3.RELEASE</version>
	<relativePath ></relativePath>
</parent>
<dependencies>
	<!-- Spring Boot Web 依赖 核心 -->
	<dependency>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-web</artifactId>
	</dependency>
	<dependency>
		<groupId>org.projectlombok</groupId>
		<artifactId>lombok</artifactId>
		<version>1.16.20</version>
	</dependency>
</dependencies>

application.yml文件中添加配置

server:
  port: 8080

spring:
  servlet:
    multipart:
      enabled: true
#      最大支持文件大小
      max-file-size: 100MB
#      最大支持请求大小
      max-request-size: 100MB

#文件存储路径
filepath: D:/file/

文件存储路径可以修改,文件上传的大小限制这里设置的100M

controller层

在controller文件夹下创建FileController在controller文件夹下创建FileController

因为这里只进行文件上传下载,不进行业务逻辑处理,因此只用在控制层实现即可,定义文件上传、下载的接口。

@RestController
@RequestMapping("/file")
@Slf4j
public class FileController {

    @Value("${filepath}")
    private String filepath;

    /**
     * 处理文件上传
     */
    @PostMapping(value = "/upload")
    public String uploading(@RequestParam("file") MultipartFile file) {
        File targetFile = new File(filepath);
        if (!targetFile.exists()) {
            targetFile.mkdirs();
        }
        try (FileOutputStream out = new FileOutputStream(filepath + file.getOriginalFilename());){
            out.write(file.getBytes());
        } catch (Exception e) {
            e.printStackTrace();
            log.error("文件上传失败!");
            return "uploading failure";
        }
        log.info("文件上传成功!");
        return "uploading success";
    }

    @RequestMapping("/download")
    public void downLoad(HttpServletResponse response) throws UnsupportedEncodingException {
        String filename="JAVA核心知识点整理.pdf";
        String filePath = "D:/file" ;
        File file = new File(filePath + "/" + filename);
        if(file.exists()){
            response.setContentType("application/octet-stream");
            response.setHeader("content-type", "application/octet-stream");
            response.setHeader("Content-Disposition", "attachment;fileName=" + URLEncoder.encode(filename,"utf8"));
            byte[] buffer = new byte[1024];
            //输出流
            OutputStream os = null;
            try(FileInputStream fis= new FileInputStream(file);
                BufferedInputStream bis = new BufferedInputStream(fis);) {
                os = response.getOutputStream();
                int i = bis.read(buffer);
                while(i != -1){
                    os.write(buffer);
                    i = bis.read(buffer);
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
}

html页面进行测试

在resource下创建static文件夹,在static文件夹下创建file.html
springboot项目中,静态资源默认访问目录就是resource下的static文件夹

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>文件上传</title>
</head>
<body>
<form enctype="multipart/form-data" method="post" action="file/upload">
    <input type="file" name="file"/>
    <input type="submit" value="上传"/>
</form>
<a href="http://t.zoukankan.com/file/download">文件下载</a>
</body>
</html>

启动类:

在controller同级的目录下创建启动类FileApplication

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

测试:运行启动类,访问localhost:8080/file.html ,进行相关操作。

本文GitHub源码:https://github.com/lixianguo5097/springboot/tree/master/springboot-file

CSDN:https://blog.csdn.net/qq_27682773
简书:https://www.jianshu.com/u/e99381e6886e
博客园:https://www.cnblogs.com/lixianguo
个人博客:https://www.lxgblog.com

免责声明:文章转载自《SpringBoot实现文件上传下载》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇JavaEE——Spring4--(10)Spring 事务的属性(传播属性,隔离级别,回滚,只读,过期)Android学习笔记(一)之仿正点闹钟时间齿轮滑动的效果下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

iframe的基本使用及利用nginx解决iframe跨域

一.场景 在前端大屏页面中,用iframe嵌套了手机模拟器,手机模拟器进入某个页面,这个页面调用接口实现单点登录 前端大屏地址:https://域名1:7443/1.html    通过nginx访问的页面 不可以调用成功接口的手机端地址:https://域名1/st_app/zlj_homepage/tourists_ys.html?utype=999...

iterm2 "agnoster"主题设置中的一些踩坑 2018.8

主线教程:https://www.cnblogs.com/xishuai/p/mac-iterm2.html (1)在链接的“3.配置oh My zsh”中,编辑vim~/.zshrc后两下回车,然后按“i”进入编辑模式。 (2)如何保存vim中的内容:按一下esc,退出编辑模式,然后输入“:wq!”(强行保存内容,并退出) vim编辑命令:https:/...

https配置

1. https配置 1.1. 步骤 升级HTTPS,我们可以分为购买证书、安装证书、设置跳转这三个步骤 1.2. 申请证书 证书类型分为DV、OV、EV这三种,这三种有什么区别? - DV(域名型SSL):个人站点、iOS应用分发站点、登陆等单纯https加密需求的链接; - OV(企业型SSL):企业官网; - EV(增强型SSL):对安全需求更强的企...

VUE 进阶

4. 通过axios实现数据请求vue.js默认没有提供ajax功能的。 所以使用vue的时候,一般都会使用axios的插件来实现ajax与后端服务器的数据交互。 注意,axios本质上就是javascript的ajax封装,所以会被同源策略限制。 下载地址: https://unpkg.com/axios@0.18.0/dist/axios.js ht...

Metasploit 安装及使用

    官网 https://www.metasploit.com/ 使用手册 https://metasploit.help.rapid7.com/docs 简介 开源安全漏洞检测工具,附带数百个已知的软件漏洞,并保持频繁更新。被安全社区冠以“可以黑掉整个宇宙”之名的强大渗透测试框架。 MetaSploit 截止目前(2020/06/29)有两个版本:...

[原创]Emmagee V2.4工具使用介绍

[原创]Emmagee V2.4工具使用介绍 1 Emmagee 介绍   Emmagee 是网易杭州研究院 QA团队开发的一款简单易上手的Android性能监控App,主要用于监控单个App的CPU、内存、流量、启动耗时、电量、电流等性能状态的变化,且用户可自定义配置监控的频率,性能的实时显示以及heap大小的统计(root手机),并最终生成一份性能统计...