springboot+layui上传图片到服务器上,重启服务器,图片消息问题解决

首先:解释一下原因【个人理解】:因为图片只是临时存入到服务器中,重启之后,临时文件会被删除,所以重启之后图片会被删除,再看页面,图片不能显示。

解决方法:

1.配置静态资源映射

package com.hl.configuration;

import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

import javax.servlet.Filter;

/**
 * 资源映射路径
 */
@Configuration
public class ImgConfigurer implements WebMvcConfigurer {
    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/upload/**").  //服务器文件路径
                addResourceLocations("file:/" + "C://upload/"); //映射的本地文件路径
    }
}

2.在配置文件中配置路径

[要注意rootPath:与值中间必须有一个空格(yml配置文件规则)]

file:
  #本地路径
  rootPath: C://upload/   
  #服务器路径  :获取方式request.getServletContext().getRealPath("/upload/");
#  rootPath: 服务器路径/upload/

3.在上传方法中的使用

@Controller
@RequestMapping("/upload")

public class LayEditController {
   //配置文件中配置本地映射路径/服务器路径
    @Value("${file.rootPath}")
    private String rootPath;

   
    //上传文件
    @ResponseBody
    @RequestMapping(value = "/uploadFile")

    public String uploadFile(HttpServletRequest request,@Param("file") MultipartFile file) throws IOException{
        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmssSS");
        String res = sdf.format(new Date());
        //服务器上使用

//如果在配置文件中已经配置,可以不用写
//        String rootPath =request.getServletContext().getRealPath("/upload/");//target的目录
        //本地使用
//        String rootPath ="/C:/upload/";


        //原始名称
        String originalFilename = file.getOriginalFilename();
        //新的文件名称
        String newFileName = res+originalFilename.substring(originalFilename.lastIndexOf("."));
        //创建年月文件夹
        Calendar date = Calendar.getInstance();
        File dateDirs = new File(date.get(Calendar.YEAR)
                + File.separator + (date.get(Calendar.MONTH)+1));
        //新文件
        File newFile = new File(rootPath+File.separator+dateDirs+File.separator+newFileName);
        //判断目标文件所在的目录是否存在
        if(!newFile.getParentFile().exists()) {
            //如果目标文件所在的目录不存在,则创建父目录
            newFile.getParentFile().mkdirs();
        }
        System.out.println(newFile); //可打印出文件路径
        //将内存中的数据写入磁盘
        file.transferTo(newFile);

        //完整的url
        String fileUrl =  "/upload/"+date.get(Calendar.YEAR)+ "/"+(date.get(Calendar.MONTH)+1)+ "/"+ newFileName;
        Map<String,Object> map = new HashMap<String,Object>();
        Map<String,Object> map2 = new HashMap<String,Object>();
        //0表示成功,1失败
        map.put("code",0);
        //提示消息
        map.put("msg","上传成功");
        map.put("data",map2);
        //图片url
        map2.put("src",fileUrl);
        //图片名称,这个会显示在输入框里
        map2.put("title",newFileName);
        String result = new JSONObject(map).toString();
        return result;
    }
}
 

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值