我的编程空间,编程开发者的网络收藏夹
学习永远不晚

江帅帅:精通 Spring Boot 系列 06

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

江帅帅:精通 Spring Boot 系列 06

Spring Boot 文件的上传下载

说真的,在 Spring Boot 实现文件下载,真的是方便到让我颤抖。Java 中实现文件上传可以用两个组件:CommonMultipartResolver 和 StandardServletMultipartResolver。

Spring Boot 在 web 模块中集成了 Spring MVC ,文件上传这块儿的支持是可以通过即插即用的 MultipartResolver 实现类:CommonMultipartResolver。如果用它,则需要使用 commons-fileupload 组件来处理。

Spring Boot 提供的文件上传自动化配置类是 MultipartAutoConfiguration 中默认使用了 StandardServletMultipartResolver,在上传文件甚至能够做到零配置。

1. 单文件上传

1)添加 fileUpload.html 文件

在上传页面的表单中,添加一个 type 为 file 的控件,用来选择需要上传的图片文件。上传的接口是“/upload”,另外 method 要设置为“post”,还有 enctype 要设置为“multipart/form-data”,代码具体如下:

        upload

2)添加 FileUploadController 文件

首先,设置我们的文件上传路径为项目运行目录下的 upload 文件夹。然后,我们用 MultipartFile 来绑定上传的文件,使用 transferTo() 方法可以非常方便实现文件存储到磁盘当中。具体实现代码如下:

(){    String path = req.getSession().getServletContext().getRealPath();    File folder =  File(path);     (!folder.isDirectory()) {        folder.mkdirs();    }    String oName = uploadFile.getOriginalFilename();    String nName = UUID.randomUUID().toString() + oName.substring(oName.lastIndexOf(), oName.length());     {        uploadFile.transferTo( File(folder + File.separator + nName));        String filePath = req.getScheme() +  + req.getServerName() +  + req.getServerPort() +  + nName;         ;    }  (IOException ex) {        ex.printStackTrace();    }     ;}

地址栏中,输入 http://localhost:8080/fileUpload.html 选择文件上传,具体运行效果如下:

江帅帅:精通 Spring Boot 系列 06

江帅帅:精通 Spring Boot 系列 06

2. 采用对象方式来上传文件

很多时候的上传操作,也都会把文件作为对象的属性进行保存,具体如何实现?下面通过注册页面,填写用户的相关信息,然后点击注册来上传 User 对象。

1)添加 fileUpload2.html 文件

通过一个表单,来收集用户的具体信息,然后点击“注册用户”按钮即可提交 /register 注册请求。代码具体如下:

            用户名:        密码:        头像:

2)添加 User 类

User 类主要是用来封装用户信息的,其中 MultipartFile 类型的 pic 是用来接收上传的图像文件。

 {     String username;     String password;     MultipartFile pic;    }

3)添加 userRegister() 方法

在 userRegister() 方法形参列表中,使用 @ModelAttribute 注解将表单提交的数据绑定到 User 对象中,其中图片会保存到 User 的 pic 属性中,然后转换为 Multipart 类型。文件上传成功之后,所有的用户信息都保存到 model 当中。

 {    ()    {         (!user.getPic().isEmpty()) {            String picPath = req.getServletContext().getRealPath();            String picName = user.getPic().getOriginalFilename();            File filePath =  File(picPath, picName);             (!filePath.getParentFile().exists()){                filePath.getParentFile().mkdirs();            }            user.getPic().transferTo( File(picPath + File.separator + picName));            model.addAttribute(, user);             ;        }  {             ;        }    }}

3)在 templates 目录中,添加 userMsg.html 文件

                                    用户名

运行效果,具体如下:

江帅帅:精通 Spring Boot 系列 06

3. 多文件上传

1)添加 fileUpload2.html 页面
    选第一张图片:    选第二张图片:    选第三张图片:
2)添加 uploadFiles() 方法
(){    String path = req.getSession().getServletContext().getRealPath();    File folder =  File(path);     (!folder.isDirectory()) {        folder.mkdirs();    }     ( != uploadFiles && uploadFiles.length > ) {         (MultipartFile uploadFile : uploadFiles) {            String oName = uploadFile.getOriginalFilename();            String nName = UUID.randomUUID().toString() + oName.substring(oName.lastIndexOf(), oName.length());             {                uploadFile.transferTo( File(folder, nName));                 ;            }  (IOException ex) {                ex.printStackTrace();            }        }    }     ;}

运行结果,具体如下:

江帅帅:精通 Spring Boot 系列 06

4. 文件下载

1)编辑 userMsg.html 页面
                    用户名        下载头像
2)添加 downloadPic() 方法

这里使用了 ResponseEntity 类型,就能定义返回的 HttpHeaders、BodyBuilder 和 HttpStatus,然后返回客户端下载。

(value=) ResponseEntity<[]> downloadPic(HttpServletRequest request, () String filename, () String userAgent, Model model) Exception{    String path = request.getServletContext().getRealPath(        );    File file =  File(path + File.separator + filename);    BodyBuilder builder = ResponseEntity.ok();    builder.contentLength(file.length());        builder.contentType(MediaType.APPLICATION_OCTET_STREAM);        filename = URLEncoder.encode(filename, );     (userAgent.indexOf() > ) {                builder.header(,  + filename);    }  {                builder.header(,  + filename);    }     builder.body(FileUtils.readFileToByteArray(file));}

运行效果,具体如下:

江帅帅:精通 Spring Boot 系列 06

免费领取更多技术资料及视频

江帅帅:精通 Spring Boot 系列 06

本文来源于:奈学开发者社区-江帅帅

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

江帅帅:精通 Spring Boot 系列 06

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

江帅帅:精通 Spring Boot 系列 06

Spring Boot 文件的上传下载说真的,在 Spring Boot 实现文件下载,真的是方便到让我颤抖。Java 中实现文件上传可以用两个组件:CommonMultipartResolver 和 StandardServletMult
2023-06-02

江帅帅:精通 Spring Boot 系列 02

1 @SpringBootApplication 注解Spring Boot 的启动类,也就是入口类,需要使用 @SpringBootApplication 注解来标注。在启动类中,我们的 main 方法就是 Java 应用程序的入口方法。
2023-06-05

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录