上传文件

一、方式一

1.上传页面

upLoadPage.html

 <!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8"/>
<title>Title</title>
</head>
<body>
<h1>Thymeleaf</h1>
<form action="upload" method="post" enctype="multipart/form-data">
选择图片:<input type="file" name="file" accept="image/*"/><br/>
<input type="submit" value="上传"/>
</form>
</body>
</html>

<1>. method="post" 是必须的
<2>. enctype="multipart/form-data" 是必须的,表示提交二进制文件
<3>. name="file" 是必须的,和后续服务端对应
<4>. accept="image/*" 表示只选择图片

2.上传文件页面跳转控制器,用来跳转到上传页面。

     @RequestMapping("upLoadPage")
public String uploadPage(){
return "upLoadPage";
}

3.上传文件控制器,用来上传文件,并跳转到显示页面。

     @RequestMapping(value = "/upload",method = RequestMethod.POST)
public String upload(HttpServletRequest request, @RequestParam("file")MultipartFile file, Model model){ try {
String fileName=System.currentTimeMillis()+file.getOriginalFilename();
String destFileName=request.getServletContext().getRealPath("")+"uploaded"+File.separator+fileName;
File destFile=new File(destFileName);
destFile.getParentFile().mkdirs();
file.transferTo(destFile);
//System.out.println(destFileName);
model.addAttribute("fileName",fileName);
}catch (FileNotFoundException e){
e.printStackTrace();
return "上传失败,"+e.getMessage();
}catch (IOException e){
e.printStackTrace();
return "上传失败,"+e.getMessage();
}
return "showImage";
}

<1>. 接受上传的文件

@RequestParam("file") MultipartFile file

<2>. 根据时间戳创建新的文件名,这样即便是第二次上传相同名称的文件,也不会把第一次的文件覆盖了

String fileName = System.currentTimeMillis()+file.getOriginalFilename();

<3>. 通过req.getServletContext().getRealPath("") 获取当前项目的真实路径,然后拼接前面的文件名

String destFileName=req.getServletContext().getRealPath("")+"uploaded"+File.separator+fileName;

<4>. 第一次运行的时候,这个文件所在的目录往往是不存在的,这里需要创建一下目录

File destFile = new File(destFileName);
destFile.getParentFile().mkdirs();

<5>. 把浏览器上传的文件复制到希望的位置

file.transferTo(destFile);

<6>. 把文件名放在model里,以便后续显示用

model.addAttribute("fileName",fileName);

4.显示页面

showImage.html

 <!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8"/>
<title>Title</title>
</head>
<body>
<img th:src="@{/uploaded/{filename}(filename=${fileName})}"/>
</body>
</html>

5.application.properties

 #spring.mvc.view.prefix=/WEB-INF/jsp/
#spring.mvc.view.suffix=.jsp
spring.http.multipart.max-file-size=10MB
spring.http.multipart.max-request-size=10MB spring.thymeleaf.enabled=true server.port=5050

设置上传文件的大小,默认是1m,太小了,文件稍微大一点就会出错。修改端口,启用thymeleaf模板

6.测试

文件的存储路径:

二、方式二(将文件保存在项目目录下)

1.在pom.xml增加依赖,使项目支持JSP。

         <!-- servlet依赖. -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId> </dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
</dependency>
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-jasper</artifactId>
</dependency>

2.在main目录下,新建-> webapp/WEB-INF/jsp 目录,用来存放视图。webapp存放视图和资源(上传的文件)

3.showImage.jsp、upLoadPage.jsp中的内容直接把html中的复制过来即可。

 <%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%> <img src="/uploaded/${fileName}">

4.application.properties中添加对jsp视图的解析路径,并将thymeleaf模板关闭。

 spring.mvc.view.prefix=/WEB-INF/jsp/
spring.mvc.view.suffix=.jsp
4.spring.thymeleaf.enabled=false

5.测试

上传文件所在位置:

代码:https://github.com/lyj8330328/springboot-upload-demo

笔记70 Spring Boot快速入门(八)(重要)的更多相关文章

  1. 笔记61 Spring Boot快速入门(一)

    IDEA+Spring Boot快速搭建 一.IDEA创建项目 略 项目创建成功后在resources包下,属性文件application.properties中,把数据库连接属性加上,同时可以设置服 ...

  2. 笔记65 Spring Boot快速入门(五)

    SpringBoot+JPA 一.什么是JPA? JPA是Java Persistence API的简称,中文名Java持久层API,是JDK 5.0注解或XML描述对象-关系表的映射关系,并将运行期 ...

  3. 笔记63 Spring Boot快速入门(三)

    SpringBoot中使用JSP Springboot的默认视图支持是Thymeleaf,但是Thymeleaf还没开始学,熟悉的还是jsp,所以要让Springboot支持 jsp. 一.在pom. ...

  4. 笔记64 Spring Boot快速入门(四)

    SpringBoot中错误处理.端口设置和上下文路径以及配置切换 一.错误处理 假设在访问首页的时候会出现一些错误,然后将这些错误当作异常抛出,反馈给用户. 1.修改IndexController.j ...

  5. 笔记62 Spring Boot快速入门(二)

    SpringBoot部署 一.jar方式 1.首先安装maven. <1>下载最新的maven版本:https://maven.apache.org/download.cgi <2& ...

  6. 笔记67 Spring Boot快速入门(七)

    SpringBoot+RESTful+JSON 一.RESTful架构 REST全称是Representational State Transfer,中文意思是表述(编者注:通常译为表征)性状态转移. ...

  7. 笔记66 Spring Boot快速入门(六)

    SpringBoot中使用Mybatis 一.注解方式 1.创建映射文件CategoryMapper.java 使用注解@Mapper 表示这是一个Mybatis Mapper接口.使用@Select ...

  8. Spring Boot 快速入门

    Spring Boot 快速入门 http://blog.csdn.net/xiaoyu411502/article/details/47864969 今天给大家介绍一下Spring Boot MVC ...

  9. Spring Boot快速入门(二):http请求

    原文地址:https://lierabbit.cn/articles/4 一.准备 postman:一个接口测试工具 创建一个新工程 选择web 不会的请看Spring Boot快速入门(一):Hel ...

随机推荐

  1. java 反转数组

    package java03; public class Demo05ArrayReversr { public static void main(String[] args) { int[] arr ...

  2. vscode舒适的字体风格

    首选项-->设置-->输入setting.json-->查找到设置文件 添加如下配置 "editor.tabSize": 2, "files.assoc ...

  3. boost array

    boost::array is similar to std::array, which was added to the standard library with C++11. With boos ...

  4. sql语句中取整数和小数部分

    sql 取整数去小数点 ,) ' Sql截取浮点小数位数,不四舍五入 ,) 结果:551.24 ,) 结果:551.23 第一个2表示截取2位 第二个0,1分别表示0是四舍五入,0以外是截取 如何分别 ...

  5. iview的Affix组件滚动时没有按照预期固定

    业务场景 新建任务的页面,创建和重置按钮,页面没有滚动时,直接跟在内容下面:页面滚动时,固定于页面下方,不随内容进行滚动,以方便按钮的操作.效果如下: 问题以及解决办法 直接使用<Affix : ...

  6. AT2705 Yes or No(组合数学)

    传送门 解题思路 首先将这个模型放到坐标轴上,\(x\)轴表示\(1\),\(y\)轴表示\(0\).问题就转化成了从\((0,0)\)走到\((n,m)\),每次可以猜测向\(x\)轴或向\(y\) ...

  7. LOJ 6436 「PKUSC2018」神仙的游戏——思路+卷积

    题目:https://loj.ac/problem/6436 看题解才会. 有长为 i 的 border ,就是有长为 n-i 的循环节. 考虑如果 x 位置上是 0 . y 位置上是 1 ,那么长度 ...

  8. CF 778D Parquet Re-laying——构造

    题目:http://codeforces.com/problemset/problem/778/D 完全没思路……就看了题解. 很好地思路是考虑操作可逆,所以起始状态和最终状态都变到一个中转状态,即都 ...

  9. JavaScript 类型浅解

    对于JavaScript 类型,可简单地概括为:相对于强类型语言来说,它是弱(松散)类型的语言:有基本类型和引用类型,他们是区别是一个有固定空间存在于栈内存中,一个没有固定空间保存在堆内存中并且在栈内 ...

  10. css缓存问题

    频繁更换样式,会导致样式缓存, 在实际项目开发过过程中,页面是上传到服务器上的.而为了减少服务器的压力,让用户少加载,浏览器会将图片.css.js缓存到本地中,以便下次访问网站时使用.这样做不仅减少了 ...