码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • SpringMvc第四战-【SpringMvc文件上传,下载】


    目录

    一.SpringMvc文件上传

    1.导入依赖(在pom.xml中)

    2.配置文件上传解析器(在spring-mvc.xml中)

    3.前端标记多功能表单(构建一个jsp界面来操作)

    4.将文件写出流,然后写入服务器

    5.配置映射地址(硬盘和网络地址的映射)

    5.1硬盘路径

    5.2服务器路径

    ​编辑 

    6.在resource包咯构建一个类用于映射

    7.效果图形式

    二.文件下载 

    1.编写方法用于图片下载

    2.在list.jsp增加一个图片下载的点击事件

    3.展示效果图

    三..jrebel的使用

    1.安装jrebel插件

    2.打开代理ReverseProxy_windows_amd64.exe(顺序不能错)

    3.jrebel启动项目

    4.启动时要输入UUID

    5.设置jrebel离线(不需要打开打理)

    6.再次jrebel启动项目即可运行

    四.多文件上传

    1.编写用于多文件上传的语句

    2.在upload.jsp增加用于多文件上传的from表单

    3.运行结果


    前言:

    小编详细的向读者展示了:如在新建一个Maven项目的情况下去搭建一个Springmvc ,mybatis,maven集成然后实现SpringMvc的CRUD,以及对于效果图的展示!本次小编带来的的关于文件的上传以及下载!

    一.SpringMvc文件上传

    1.导入依赖(在pom.xml中)

    1. <dependency>
    2. <groupId>commons-fileuploadgroupId>
    3. <artifactId>commons-fileuploadartifactId>
    4. <version>1.3.3version>
    5. dependency>

    2.配置文件上传解析器(在spring-mvc.xml中)

    1. <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
    2. <property name="defaultEncoding" value="UTF-8">property>
    3. <property name="maxUploadSize" value="52428800">property>
    4. <property name="resolveLazily" value="true"/>
    5. bean>

    3.前端标记多功能表单(构建一个jsp界面来操作)

    1. <%--
    2. Created by IntelliJ IDEA.
    3. User: lzzxq
    4. Date: 2023/9/9
    5. Time: 14:26
    6. To change this template use File | Settings | File Templates.
    7. --%>
    8. <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    9. 书籍头像上传
    10. "${pageContext.request.contextPath}/book/upload" method="post" enctype="multipart/form-data">
    11. "text" name="bid" readonly="readonly" value="${param.bid}"/>
    12. "file" name="xxx"/>
    13. "submit" value="上传图片"/>

    4.将文件写出流,然后写入服务器

    后端利用muiltpartFile类,接收前端传递到后端的文件

    1. @RequestMapping("/upload")
    2. //头像上传
    3. public String upload(Book book,MultipartFile xxx){
    4. try {
    5. //上传的图片存放地址
    6. String dir=PropertiesUtil.getValue("dir");
    7. // 网络访问地址
    8. String server=PropertiesUtil.getValue("server");
    9. String filename = xxx.getOriginalFilename();
    10. System.out.println("文件名:"+filename);
    11. System.out.println("文件类型:"+xxx.getContentType());
    12. FileUtils.copyInputStreamToFile(xxx.getInputStream(),new File(dir+filename));
    13. //修改字段名的属性
    14. book.setBname(server+filename);
    15. bookBiz.updateByPrimaryKeySelective(book);
    16. } catch (IOException e) {
    17. e.printStackTrace();
    18. }
    19. return "redirect:list";
    20. }

    5.配置映射地址(硬盘和网络地址的映射)

    5.1硬盘路径

    5.2服务器路径

     

    6.在resource包咯构建一个类用于映射

    7.效果图形式

    二.文件下载 

    1.编写方法用于图片下载

    1. //文件下载
    2. @RequestMapping(value="/download")
    3. public ResponseEntity<byte[]> download(Book book, HttpServletRequest req){
    4. try {
    5. //先根据文件id查询对应图片信息
    6. Book bk=this.bookBiz.selectByPrimaryKey(book.getBid());
    7. String diskPath = PropertiesUtil.getValue("dir");
    8. String reqPath = PropertiesUtil.getValue("server");
    9. String realPath = bk.getBname().replace(reqPath,diskPath);
    10. String fileName = realPath.substring(realPath.lastIndexOf("/")+1);
    11. //下载关键代码
    12. File file=new File(realPath);
    13. HttpHeaders headers = new HttpHeaders();//http头信息
    14. String downloadFileName = new String(fileName.getBytes("UTF-8"),"iso-8859-1");//设置编码
    15. headers.setContentDispositionFormData("attachment", downloadFileName);
    16. headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);
    17. //MediaType:互联网媒介类型 contentType:具体请求中的媒体类型信息
    18. return new ResponseEntity<byte[]>(FileUtils.readFileToByteArray(file),headers, HttpStatus.OK);
    19. }catch (Exception e){
    20. e.printStackTrace();
    21. }
    22. return null;
    23. }

    2.在list.jsp增加一个图片下载的点击事件

     "${pageContext.request.contextPath }/book/download?bid=${b.bid}">图片下载

    3.展示效果图

    三..jrebel的使用

    1.安装jrebel插件

    2.打开代理ReverseProxy_windows_amd64.exe(顺序不能错)

    3.jrebel启动项目

    4.启动时要输入UUID

    第一行输入:  http://127.0.0.1:8888/GUID

    其次在浏览器输入

    GUID online erstellen Kostenloses Tool, um global eindeutige Nummern (GUIDs) zu generierenicon-default.png?t=N7T8https://www.guidgen.com/

     

    在将GUID赋值GUID到网址前面 

    5.设置jrebel离线(不需要打开打理)

    6.再次jrebel启动项目即可运行

    四.多文件上传

    1.编写用于多文件上传的语句

    1. //多文件上传
    2. @RequestMapping("/uploads")
    3. public String uploads(HttpServletRequest req, Book book, MultipartFile[] files){
    4. try {
    5. StringBuffer sb = new StringBuffer();
    6. for (MultipartFile cfile : files) {
    7. //思路:
    8. //1) 将上传图片保存到服务器中的指定位置
    9. String dir = PropertiesUtil.getValue("dir");
    10. String server = PropertiesUtil.getValue("server");
    11. String filename = cfile.getOriginalFilename();
    12. FileUtils.copyInputStreamToFile(cfile.getInputStream(),new File(dir+filename));
    13. sb.append(filename).append(",");
    14. }
    15. System.out.println(sb.toString());
    16. } catch (Exception e) {
    17. e.printStackTrace();
    18. }
    19. return "redirect:list";
    20. }

    2.在upload.jsp增加用于多文件上传的from表单

    1. "post" action="${pageContext.request.contextPath}/book/uploads" enctype="multipart/form-data">
    2. "file" name="files" multiple>

    3.运行结果

  • 相关阅读:
    从入门开始手把手搭建千万级Java算法测试-主页面的搭建和自定义测试数组生成类
    中英文说明书丨艾美捷1,2-二硬脂酰-sn-甘油-3-PC(DSPC)
    spring boot集成dubbo(从0到1)
    平板电脑在AI 人工智能时代的新机遇是哪些?
    浅析DNS劫持及应对方案
    【GESP】2023年06月图形化三级 -- 自幂数判断
    三个激活函数在同一figure上的实现
    《HDMapNet:An Online HD Map Construction and Evaluation Framework》论文笔记
    【Bluetooth蓝牙开发】六、BLE协议之物理层浅析
    坚固可靠的多合一轨道交通天线让您的赏秋路途不再枯燥
  • 原文地址:https://blog.csdn.net/lz17267861157/article/details/132775380
  • 最新文章
  • 沪漂五周年了:我越来越迷茫了
    Agentic Skill Routing 实战:别再把所有 Skill 塞进 AI Agent 上下文
    MySQL-Seconds_behind_master的精度误差
    [MAF预定义ChatClient中间件-03]CachingChatClient——利用缓存省钱省时间
    AI的至暗历史:从万众期待到被政府撤资,AI的两次死亡徘徊
    Agent OS :五种驯服不确定性的范式
    PortSwigger SQL注入LAB11
    数据库即时编译JIT
    [Begin]AI Learn Data Day 0
    深度学习进阶(二十七)现代 LLM 的核心架构设计其二:SwiGLU
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号