SpringBoot 文件上传/下载

简介: 有啥不懂的或者出错的可以在下面留言。1. 文件上传 //上传路径 String folder = "C:\\code\\springboot-springsecurity\\security-demo\\src\\main\\java...

有啥不懂的或者出错的可以在下面留言。

1. 文件上传

    //上传路径
    String folder = "C:\\code\\springboot-springsecurity\\security-demo\\src\\main\\java\\com\\laojiao\\xxx\\controller";

    @PostMapping
    public String upload(MultipartFile file) throws IOException {

        System.out.println(file.getName());
        System.out.println(file.getOriginalFilename());
        System.out.println(file.getSize());

        //创建本地文件
        File localFile = new File(folder,System.currentTimeMillis()+".txt");
        //把传上来的文件写到本地文件
        file.transferTo(localFile);
        //返回localFile文件路径
        return localFile.getAbsolutePath();
    }

返回是String就是文件所在路径,一般把它放到数据库中。
我在这里用的是单机上传,如果有需要上传到ftp或者fastdfs等文件服务器,请看下面核心代码。

            //利用 MultipartFile 的 transferTo 方法 上传文件 至 path
            file.transferTo(targetFile);
            //上传到 FTP 服务器
            FTPUtil.uploadFile(Lists.newArrayList(targetFile));
            //删除 path 路径下的 文件
            targetFile.delete();

最后返回一个文件名。需要下载或者获取文件的时候,给该文件名加上前缀即可。

2. 文件下载

    @GetMapping("/{id}")
    public void download(@PathVariable String id, HttpServletRequest request, HttpServletResponse response){
        try(InputStream inputStream = new FileInputStream(new File(folder,id+".txt"));
            OutputStream outputStream = response.getOutputStream();) {

            //设置内容类型为下载类型
            response.setContentType("application/x-download");
            //设置请求头 和 文件下载名称
            response.addHeader("Content-Disposition","attachment;filename=test.txt");
            //用 common-io 工具 将输入流拷贝到输出流
            IOUtils.copy(inputStream,outputStream);
            outputStream.flush();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }catch (IOException e) {
            e.printStackTrace();
        }
    }

注意IOUtils 是apache的一个工具包,是需要导入common-io依赖包的。或者你手动获取输入输出流转换也可以。

介绍下我的所有文集:

流行框架

SpringCloud
springboot
nginx
redis

底层实现原理:

Java NIO教程
Java reflection 反射详解
Java并发学习笔录
Java Servlet教程
jdbc组件详解
Java NIO教程
Java语言/版本 研究

相关文章
|
1月前
|
Java 容器
SpringBoot读取resources下的文件以及resources的资源路径
SpringBoot读取resources下的文件以及resources的资源路径
35 0
|
2月前
|
Java 数据库连接 mybatis
springboot访问jsp页面变成直接下载?
springboot访问jsp页面变成直接下载?
68 0
|
3月前
|
JavaScript 前端开发 Java
springboot整合minio+vue实现大文件分片上传,断点续传(复制可用,包含minio工具类)
springboot整合minio+vue实现大文件分片上传,断点续传(复制可用,包含minio工具类)
529 0
|
1月前
|
Java
SpringBoot文件上传单文件多文件上传
SpringBoot文件上传单文件多文件上传
12 0
|
20小时前
|
安全 JavaScript Java
springboot实现文件防盗链设计
`shigen`,一位专注于Java、Python、Vue和Shell的博主,分享成长和技术。近期将探讨SpringBoot实现图片防盗链,通过限制`Referer`防止资源被盗用。基础版通过`WebMvcConfigurer`配置静态资源,升级版添加拦截器检查`Referer`,确保请求来源合法性。详细代码实现和案例可在文中链接找到。一起学习,每天进步!
32 13
springboot实现文件防盗链设计
|
17天前
|
Java 数据安全/隐私保护 开发者
【SpringBoot】讲清楚日志文件&&lombok
【SpringBoot】讲清楚日志文件&&lombok
22 5
|
26天前
|
JSON 前端开发 JavaScript
Vue+Axios+SpringBoot后端同时接收文件和json作为请求参数
Vue+Axios+SpringBoot后端同时接收文件和json作为请求参数
38 0
|
1月前
|
前端开发 Java 开发工具
【SpringBoot】文件分片上传、合并
【SpringBoot】文件分片上传、合并
|
2月前
|
Java
SpringBoot操作excel文件【工具类】
SpringBoot操作excel文件【工具类】
189 0
|
2月前
|
SQL Java 数据库连接
springboot解析txt文件顺便加到数据库中(nohup文件)
springboot解析txt文件顺便加到数据库中(nohup文件)
113 1