spring boot thymeleaf 图片上传web项目根目录操作步骤

 更新时间:2018年03月27日 10:35:10   作者:fengcai0123  
这篇文章主要介绍了spring boot thymeleaf 图片上传web项目根目录步骤,本文给大家提到了thymeleaf的基础知识,需要的朋友可以参考下

thymeleaf介绍

简单说, Thymeleaf 是一个跟 Velocity、FreeMarker 类似的模板引擎,它可以完全替代 JSP 。相较与其他的模板引擎,它有如下三个极吸引人的特点:

1.Thymeleaf 在有网络和无网络的环境下皆可运行,即它可以让美工在浏览器查看页面的静态效果,也可以让程序员在服务器查看带数据的动态页面效果。这是由于它支持 html 原型,然后在 html 标签里增加额外的属性来达到模板+数据的展示方式。浏览器解释 html 时会忽略未定义的标签属性,所以 thymeleaf 的模板可以静态地运行;当有数据返回到页面时,Thymeleaf 标签会动态地替换掉静态内容,使页面动态显示。

2.Thymeleaf 开箱即用的特性。它提供标准和spring标准两种方言,可以直接套用模板实现JSTL、 OGNL表达式效果,避免每天套模板、该jstl、改标签的困扰。同时开发人员也可以扩展和创建自定义的方言。

3.Thymeleaf 提供spring标准方言和一个与 SpringMVC 完美集成的可选模块,可以快速的实现表单绑定、属性编辑器、国际化等功能。

form方式上传:

//html:
<form enctype="multipart/form-data" method="post" action="/sell/imageUpload">
<div class="modal-header">
 <button type="button" class="close" data-dismiss="modal" aria-hidden="true"> </button>
 <h4 class="modal-title" id="myModalLabel">Edit goods information</h4>
</div>
<div class="modal-body">
 <div class="input-group">
  <label class="col-lg-4">name:</label>
  <input class="col-lg-8" id="edit_name" value="${goods.name}" name="name"/>
 </div>
<div class="input-group">
  <label class="col-lg-4">code:</label>
  <input class="col-lg-8" id="edit_sn" name="sn" value="${goods.sn}" />
 </div>
<div class="input-group">
  <label class="col-lg-4">weight:</label>
  <input class="col-lg-8" id="edit_weight" name="weight" value="${goods.weight}" />
 </div>
<div class="input-group">
  <label class="col-lg-4">marketPrice:</label>
  <input class="col-lg-8" id="edit_marketPrice" name="marketPrice" value="${goods.marketPrice}" />
 </div>
<div class="input-group">
  <label class="col-lg-4">shopPrice:</label>
  <input class="col-lg-8" id="edit_shopPrice" name="shopPrice" value="${goods.shopPrice}" />
 </div>
<div class="input-group">
  <label class="col-lg-4">unit:</label>
  <input class="col-lg-8" id="edit_unit" name="unit" value="${goods.unit}" />
 </div>
<div class="input-group">
  <label class="col-lg-4">number:</label>
  <input class="col-lg-8" id="edit_number" name="number" value="${goods.number}" />
 </div>
 <div class="input-group">
  <label class="col-lg-4">detail:</label>
  <textarea class="col-lg-8" id="edit_detail" name="detail" value="${goods.detail}" />
 </div>
<div class="input-group">
 <!--<form enctype="multipart/form-data" method="post" action="/sell/imageUpload">
  <input ype="hidden" id="edit_goods_sn" name="sn" value="${goods.sn}" />-->
  image<input type="file" id="edit_image" name="file"/>
  <input type="submit" value="upload"/>
 <!--</form>-->
 </div>
</div>
<div class="modal-footer">
 <button type="button" class="btn btn-default" data-dismiss="modal">close</button> 
 <input type="submit" class="btn btn-primary" id="edit_save" value="submit">提交更改</input>
</div>
</form>
//controller
 @RequestMapping(value = "/save",method = RequestMethod.POST)
 public String saveGoodsPage(@RequestParam(value = "id",required=false) String id,@RequestParam(value = "name",required=false) String name,@RequestParam(value = "sn",required=false) String sn,
        @RequestParam(value = "number",required=false) String number,@RequestParam(value = "weight",required=false) String weight,
        @RequestParam(value = "marketPrice",required=false) String marketPrice,@RequestParam(value = "shopPrice",required=false) String shopPrice,
        @RequestParam(value = "unit",required=false) String unit, @RequestParam(value = "detail",required=false) String detail,@RequestParam (value="file")MultipartFile file ) {
 if (!file.isEmpty()) {
  try {
   BufferedOutputStream out = new BufferedOutputStream(
     new FileOutputStream(new File("src/main/resources/static/images/product/" + sn + ".jpg")));//保存图片到目录下
   out.write(file.getBytes());
   out.flush();
   out.close();
   String filename = "\\/images\\/product\\/" + sn + ".jpg";
   /*user.setTupian(filename);
   //userRepository.save(user);//增加用户*/
  } catch (FileNotFoundException e) {
   e.printStackTrace();
   return "upload error," + e.getMessage();
  } catch (IOException e) {
   e.printStackTrace();
   return "upload error" + e.getMessage();
  }
 }
  //...其他操作
 }

补充:变量表达式和星号表达有什么区别吗?

如果不考虑上下文的情况下,两者没有区别;星号语法评估在选定对象上表达,而不是整个上下文什么是选定对象?就是父标签的值,如下:

 <div th:object="${session.user}">
 <p>Name: <span th:text="*{firstName}">Sebastian</span>.</p>
 <p>Surname: <span th:text="*{lastName}">Pepper</span>.</p>
 <p>Nationality: <span th:text="*{nationality}">Saturn</span>.</p>
 </div>

这是完全等价于:

 <div th:object="${session.user}">
  <p>Name: <span th:text="${session.user.firstName}">Sebastian</span>.</p>
  <p>Surname: <span th:text="${session.user.lastName}">Pepper</span>.</p>
  <p>Nationality: <span th:text="${session.user.nationality}">Saturn</span>.</p>
 </div>

当然,美元符号和星号语法可以混合使用:

 <div th:object="${session.user}">
  <p>Name: <span th:text="*{firstName}">Sebastian</span>.</p>
  <p>Surname: <span th:text="${session.user.lastName}">Pepper</span>.</p>
  <p>Nationality: <span th:text="*{nationality}">Saturn</span>.</p>
 </div>

总结

以上所述是小编给大家介绍的spring boot thymeleaf 图片上传web项目根目录操作步骤,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!

相关文章

  • Java实现双色球抽奖随机算法示例

    Java实现双色球抽奖随机算法示例

    本篇文章主要介绍了Java实现双色球抽奖随机算法示例,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-06-06
  • feign post参数对象不加@RequestBody的使用说明

    feign post参数对象不加@RequestBody的使用说明

    这篇文章主要介绍了feign post参数对象不加@RequestBody的使用说明,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-10-10
  • MyBatis关闭一级缓存的两种方式(分注解和xml两种方式)

    MyBatis关闭一级缓存的两种方式(分注解和xml两种方式)

    这篇文章主要介绍了MyBatis关闭一级缓存的两种方式(分注解和xml两种方式),mybatis默认开启一级缓存,执行2次相同sql,但是第一次查询sql结果会加工处理这个时候需要关闭一级缓存,本文给大家详细讲解需要的朋友可以参考下
    2022-11-11
  • Mybatis-Plus insertBatch执行缓慢的原因查询

    Mybatis-Plus insertBatch执行缓慢的原因查询

    这篇文章主要介绍了Mybatis-Plus insertBatch执行缓慢的原因查询,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-11-11
  • Java实现九九乘法表的小例子

    Java实现九九乘法表的小例子

    九九乘法表一般为三角形,每个数分别和从1到自身的数相乘然后把结果列出来,即要用到两层循环,外层是从1到9for(i=1;i<=9;i++),内层是当前数和从1到自身相乘for(j=1;j<=i;j++)
    2013-09-09
  • Java实现视频初步压缩和解压的代码示例

    Java实现视频初步压缩和解压的代码示例

    从摄像头读取每一帧的图片,用一些简单的方法将多张图片信息压缩到一份文件中(自定义的视频文件),自定义解码器读取视频文件,并将每帧图片展示成视频,本文主要介绍了Java实现视频初步压缩和解压,需要的朋友可以参考下
    2023-10-10
  • MyBatis动态SQL标签用法实例详解

    MyBatis动态SQL标签用法实例详解

    本文通过实例代码给大家介绍了MyBatis动态SQL标签用法,非常不错,具有参考借鉴价值,需要的朋友参考下吧
    2017-07-07
  • SpringSecurity权限控制实现原理解析

    SpringSecurity权限控制实现原理解析

    这篇文章主要介绍了SpringSecurity权限控制实现原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-03-03
  • Feign Client 超时时间配置不生效的解决

    Feign Client 超时时间配置不生效的解决

    这篇文章主要介绍了Feign Client 超时时间配置不生效的解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-09-09
  • Java分页查询的几种实现方法举例

    Java分页查询的几种实现方法举例

    这篇文章主要给大家介绍了关于Java分页查询的几种实现方法,分页是系统中常用到的功能,只要涉及到查询必定伴随而来的就是分页,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2023-06-06

最新评论