当前位置: 首页 > 编程笔记 >

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

傅浩漫
2023-03-14
本文向大家介绍spring boot实现上传图片并在页面上显示及遇到的问题小结,包括了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实现上传图片并在页面上显示及遇到的问题小结,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对小牛知识库网站的支持!

 类似资料:
  • 本文向大家介绍SpringBoot上传图片的示例,包括了SpringBoot上传图片的示例的使用技巧和注意事项,需要的朋友参考一下 说明:通常项目中,如果图片比较多的话,都会把图片放在专门的服务器上,而不会直接把图片放在业务代码所在的服务器上。下面的例子只是为了学习基本流程,所以放在了本地。 1、单张图片上传 1.1、前端用表单提交 前端代码: 后端代码; 1.2、前端用ajax提交 前端代码与上

  • 本文向大家介绍Django实现前台上传并显示图片功能,包括了Django实现前台上传并显示图片功能的使用技巧和注意事项,需要的朋友参考一下 1. 前台 templates/upload/upload.html 2. 项目设定 settings.py #添加 ALLOW_UPLOAD = ['jpg', 'png', 'jpeg'] 3.app设定 urls.py views.py Django实现

  • 本文向大家介绍Django实现后台上传并显示图片功能,包括了Django实现后台上传并显示图片功能的使用技巧和注意事项,需要的朋友参考一下 1.安装pillow pip install Pillow 2.创建app python manage.py startapp upload 3. project设定 settings.py urls.py 4. app 设定 models.py admin.

  • 本文向大家介绍基于VUE选择上传图片并页面显示(图片可删除),包括了基于VUE选择上传图片并页面显示(图片可删除)的使用技巧和注意事项,需要的朋友参考一下 基于VUE选择上传图片并在页面显示,图片可删除,具体内容如下 demo例子: 依赖文件:jqueryform HTML文本内容: JS文本内容: 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持呐喊教程。

  • 本文向大家介绍javascript实现图片上传前台页面,包括了javascript实现图片上传前台页面的使用技巧和注意事项,需要的朋友参考一下 这篇文章主要通过代码分析javascript实现图片上传前台页面,废话不多说了,直接贴代码了。 代码示例一: 代码示例二: 当点击选择图片时加载该js。然后复制imageDialog,在image.js查找它,会发现里面跟这差不多的东西。这时就应该懂了,u

  • 本文向大家介绍c#图片上传和显示的实现方法,包括了c#图片上传和显示的实现方法的使用技巧和注意事项,需要的朋友参考一下 由于需要图片上传的功能,所以花了一些时间网上找相关资料终于搞定,效果图如下: 下面的是解决方案截图和上传的图片截图: 具体实现代码如下: 1.界面代码 2.后台代码UploadPic.aspx.cs 3.最后防止上传大文件图片时报错,配置文件添加配置Web.config 以上就是