spring boot实现上传图片并在页面上显示及遇到的问题小结

 更新时间:2017年12月05日 16:11:35   作者:浮闲  
最近在使用spring boot搭建网站的过程之中遇到了有点小问题,最终解决方案是在main目录下新建了一个webapp文件夹,并且对其路径进行了配置,本文重点给大家介绍spring boot实现上传图片并在页面上显示功能,需要的朋友参考下吧

最近在使用spring boot搭建网站的过程之中遇到了这样一个问题:用户注册时需要上传一个属于自己的头像,注册成功之后跳转到个人中心,在个人中心中显示用户信息.其中在显示头像的时候遇到了问题:上传头像的时候,我把头像存放到了项目文件下的static文件夹中,将其地址存放到了数据库对应的用户中,并且在idea中添加了热部署,但是在注册跳转到个人中心后还是无法显示头像,只有在下一次启动项目进入到个人中心时才可以。

被这个问题困扰了许久,最后是这样的解决的:在main目录下新建了一个webapp文件夹,并且对其路径进行了配置。下面是一个解决方案的小demo,做的比较简单,请见谅~~核心代码如下:

注册界面:

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
 <meta charset="UTF-8"/>
 <title>Title</title>
</head>
<body>
<form action="/zhuce" th:action="@{/zhuce}" method="post" enctype="multipart/form-data" >
 <label>姓名</label><input type="text" name="name"/>
 <label>密码</label><input type="password" name="password"/>
 <label>上传图片</label>
 <input type="file" name="file"/>
 <input type="submit" value="上传"/>
</form>
</body>
</html>

control如下:

package com.example.demo.control;
import com.example.demo.dao.UserRepository;
import com.example.demo.domain.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.multipart.MultipartFile;
import java.io.*;
/**
 * Created by 18274 on 2017/8/9.
 */
@Controller
public class Control {
 @Autowired
 UserRepository userRepository;
 @GetMapping(value="/zhuce")
 public String zhuce(){
 return "zhuce";
 }
 @PostMapping(value="/zhuce")
 public String tijiao(@RequestParam(value="name") String name,
    @RequestParam(value="password") String password,
    @RequestParam(value="file")MultipartFile file,
    Model model) {
 User user = new User();
 user.setUsername(name);
 user.setPassword(password);
 if (!file.isEmpty()) {
  try {
  BufferedOutputStream out = new BufferedOutputStream(
   new FileOutputStream(new File("f:\\旗杯\\demo5\\src\\main\\webapp\\"+name+".jpg")));//保存图片到目录下
  out.write(file.getBytes());
  out.flush();
  out.close();
  String filename="f:\\旗杯\\demo5\\src\\main\\webapp\\"+name+".jpg";
  user.setTupian(filename);
  userRepository.save(user);//增加用户
  } catch (FileNotFoundException e) {
  e.printStackTrace();
  return "上传失败," + e.getMessage();
  } catch (IOException e) {
  e.printStackTrace();
  return "上传失败," + e.getMessage();
  }
  model.addAttribute(user);
  return "permanager";
 } else {
  return "上传失败,因为文件是空的.";
 }
 }
}

个人中心:

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
 <meta charset="UTF-8"/>
 <title>Title</title>
</head>
<body>
<p>用户名:</p>
<p th:text="${user.username}"></p>
<p>图片:</p>
<img th:src="@{${user.username}+'.jpg'}"/>
</body>
</html>

对webapp路径的配置

package com.example.demo.config;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
/**
 * Created by 18274 on 2017/8/9.
 */
@Configuration
public class MyWebAppConfigurer extends WebMvcConfigurerAdapter{
 @Override
 public void addResourceHandlers(ResourceHandlerRegistry registry) {
 registry.addResourceHandler("/src/main/webapp/**").addResourceLocations("classpath:/webapp/");
 super.addResourceHandlers(registry);
 }
}

对应的用户实体类:

package com.example.demo.domain;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
/**
 * Created by 18274 on 2017/8/9.
 */
@Entity
public class User {
 @Id
 @GeneratedValue
 private Long id;
 private String username;
 private String password;
 private String tupian;//图片地址
 public User(){}
 public Long getId() {
 return id;
 }
 public String getUsername() {
 return username;
 }
 public String getPassword() {
 return password;
 }
 public String getTupian() {
 return tupian;
 }
 public void setId(Long id) {
 this.id = id;
 }
 public void setUsername(String username) {
 this.username = username;
 }
 public void setPassword(String password) {
 this.password = password;
 }
 public void setTupian(String tupian) {
 this.tupian = tupian;
 }
}

用户实体类的接口:

package com.example.demo.dao;
import com.example.demo.domain.User;
import org.springframework.data.jpa.repository.JpaRepository;
/**
 * Created by 18274 on 2017/8/9.
 */
public interface UserRepository extends JpaRepository<User,Long>{
}

最后运行如下:

注册上传头像:

这里写图片描述 

个人中心:

这里写图片描述

ps:如果在结合spring security的话,只需要从session.SPRING_SECURITY_CONTEXT.authentication.principal.XXX中取得信息即可。

附上传的这个小demo的地址:

http://xiazai.jb51.net/201712/yuanma/demo5(jb51.net).rar

总结

以上所述是小编给大家介绍的spring boot实现上传图片并在页面上显示及遇到的问题小结,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!

相关文章

  • java批量下载将多个文件(minio中存储)压缩成一个zip包代码示例

    java批量下载将多个文件(minio中存储)压缩成一个zip包代码示例

    在Java应用程序中有时我们需要从多个URL地址下载文件,并将这些文件打包成一个Zip文件进行批量处理或传输,这篇文章主要给大家介绍了关于java批量下载将多个文件(minio中存储)压缩成一个zip包的相关资料,需要的朋友可以参考下
    2023-11-11
  • Quartz定时任务管理方式(动态添加、停止、恢复、删除定时任务)

    Quartz定时任务管理方式(动态添加、停止、恢复、删除定时任务)

    这篇文章主要介绍了Quartz定时任务管理方式(动态添加、停止、恢复、删除定时任务),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-12-12
  • 详解Java实践之建造者模式

    详解Java实践之建造者模式

    建造者模式是将一个复杂的对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。它隐藏了复杂对象的创建过程,它把复杂对象的创建过程加以抽象,通过子类继承或者重载的方式,动态的创建具有复合属性的对象
    2021-06-06
  • 加速spring/springboot应用启动速度详解

    加速spring/springboot应用启动速度详解

    这篇文章主要介绍了加速spring/springboot应用启动速度详解,本文通过实例代码给大家介绍的非常详细对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-07-07
  • 图解Java经典算法冒泡排序的原理与实现

    图解Java经典算法冒泡排序的原理与实现

    冒泡排序是一种简单的排序算法,它也是一种稳定排序算法。其实现原理是重复扫描待排序序列,并比较每一对相邻的元素,当该对元素顺序不正确时进行交换。一直重复这个过程,直到没有任何两个相邻元素可以交换,就表明完成了排序
    2022-09-09
  • linux系统下查看jdk版本、路径及配置环境变量

    linux系统下查看jdk版本、路径及配置环境变量

    在Linux系统中,配置JDK环境变量是非常重要的,它可以让你在终端中直接使用Java命令,这篇文章主要给大家介绍了关于linux系统下查看jdk版本、路径及配置环境变量的相关资料,需要的朋友可以参考下
    2024-01-01
  • JDK生成WebService客户端代码以及调用方式

    JDK生成WebService客户端代码以及调用方式

    WebService 是一种跨编程语言和跨操作系统平台的远程调用技术,下面这篇文章主要给大家介绍了关于JDK生成WebService客户端代码以及调用方式的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2024-08-08
  • Java在重载中使用Object的问题

    Java在重载中使用Object的问题

    这篇文章主要介绍了Java在重载中使用Object的问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-02-02
  • Java实现的图片高质量缩放类定义与用法示例

    Java实现的图片高质量缩放类定义与用法示例

    这篇文章主要介绍了Java实现的图片高质量缩放类定义与用法,涉及java针对图片的运算与转换等相关操作技巧,需要的朋友可以参考下
    2017-11-11
  • Java8如何利用Lambda快速生成map、多层嵌套map

    Java8如何利用Lambda快速生成map、多层嵌套map

    这篇文章主要介绍了Java8如何利用Lambda快速生成map、多层嵌套map问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-09-09

最新评论