• 图片上传简单demo及springboot上传图片


    html页面
    
    <form method="post" action="" enctype="multipart/form-data">
        <input type="file" name="file"><br>
        <span class="loading"></span>
        <input type="submit" value="提交">
    </form>
    
    controller层代码
    @GetMapping("/upload")
    public String upload() {
        return "/test";
    }
    
    @PostMapping("/upload")
    @ResponseBody
    public String upload(@RequestParam("file") MultipartFile file) {
       /* System.out.println(username);*/
        if (file.isEmpty()) {
            return "上传失败,请选择文件";
        }
        String fileName = file.getOriginalFilename();
        String filePath = "D:/";
        File dest = new File(filePath + fileName);
        try {
            file.transferTo(dest);
            System.out.println("上传成功!");
            return "上传成功";
        } catch (IOException e) {
            System.out.println("上传失败!"+e.toString());
        }
        return "上传失败!";
    }
    测试:启动项目访问测试即可
    

      上面是个简单demo,下面讲讲springboot图片上传步骤

    第一步:图片上传的绝对路径和相对路径都配置在yml 文件中,这样后期项目部署到服务器上直接改yml 文件即可,免得还要找到具体的代码再改
    yml如下:名称,存放位置都可以自定义
    upload:
      #相对路径
      relativePath: /images/
      #文件上传路径
      profile: D:/profile/game/

    第二步:读取配置文件里的值,上传图片工具类如下:

    package com.game.config;
    import org.springframework.boot.context.properties.ConfigurationProperties;
    import org.springframework.stereotype.Component;
    import org.springframework.web.multipart.MultipartFile;
    import java.io.File;
    import java.io.IOException;
    import java.text.SimpleDateFormat;
    import java.util.Random;
    @Component
    @ConfigurationProperties(prefix = "upload")//读取配置文件yml,以upload 开头的属性值
    public class FileUpload {
        private static String profile;//绝对路径
        private static String relativePath;//相对路径
    
        public static String getRelativePath() {
            return relativePath;
        }
    
        public  void setRelativePath(String relativePath) {
            this.relativePath = relativePath;
        }
    
        public static String getProfile() {
            return profile;
        }
    
        public void setProfile(String profile) {
            this.profile = profile;
        }
    
    
        //1,文件上传后新命名规则
        public  static String getRandomFileName() {
            // 生成随机文件名:当前年月日时分秒+五位随机数(为了在实际项目中防止文件同名而进行的处理)
            // 获取随机数
            final Random r = new Random();
            int rannum = (int) (r.nextDouble() * (99999 - 10000 + 1)) + 10000;
            // 当前时间
            long currentTimeMillis = System.currentTimeMillis();
            SimpleDateFormat format = new SimpleDateFormat("yyyyMMddHHmmss");
            String nowTime =format.format(currentTimeMillis);
            return nowTime + rannum;
        }
        //2.存储路径(新放路径是否存在)
        public static File getPath(){
            File file=new File(FileUpload.profile);//这里是直接调用配置文件中的值
            if(!file.exists()){//如果文件夹不存在
                file.mkdirs();//创建文件夹
            }
            return file;
        }
    
        //3.上传图片动作(并返回相对路径存储在数据库中)
        public static String upload(MultipartFile file){
            String str=file.getOriginalFilename();//原始图片名称
            String lastName=str.substring(str.indexOf("."),str.length());//获取尾缀 如.png .jpg
            String fileName = FileUpload.getRandomFileName();//生成的新文件名
            String filePath=FileUpload.getPath().getPath();//图片存放的硬盘位置
            String relativeAdress=FileUpload.relativePath+ fileName+lastName;//相对路径
            File dest = new File(filePath +'\'+ fileName+lastName);
            try {
                file.transferTo(dest);//上传图片
                System.out.println("=====文件上传成功!");
            } catch (IOException e) {
                System.out.println("=====上传失败!"+e.toString());
            }
            return relativeAdress;
        }
    
    
    
    }

    第三步:controller层调用上传图片类,即可上传如下(这里仅做参考,每个人的代码不一样)

     @PostMapping("/goodsTypeAdd")
        public String addGooodsType(GoodsType goodsType,@RequestParam("file")MultipartFile file){
            if (StringUtils.isNotEmpty(file.getOriginalFilename())) {
                goodsType.setImg(FileUpload.upload(file));
            }
            GoodsType goodsType1=goodsTypeService.insert(goodsType);
            return "redirect:/admin//goodsType";
        }

    第四步:图片都上传成功了,但是怎么让图片在项目中显示呢?还需要做个资源映射

    package com.game.config;
    
    import org.springframework.context.annotation.Configuration;
    import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
    import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
    
    @Configuration
    public class MyWebAppConfigurer implements WebMvcConfigurer {
        @Override
        public void addResourceHandlers(ResourceHandlerRegistry registry) {
            registry.addResourceHandler(FileUpload.getRelativePath()+"**").addResourceLocations("file:"+FileUpload.getProfile());
        }
    
    }

    我这里都是读取yml 里的参数的,这里接个别人的图片来说吧,

     不知道总结的好不好,自己的项目是这样弄的,谢谢大家的指点

     
  • 相关阅读:
    从零开始学Bootstrap
    CSS VS JS动画,哪个更快
    css定位(positon)
    json
    使用 CSS3 绘制 Hello Kitty
    后台找到repeater里面的div并添加客户端点击事件
    dropDownList之"请选择",同时设置默认选项
    asp.net 后台对话框,确认跳转
    后台生成textbox并设置多行属性,自动换行
    asp.net多图片上传同时保存对每张图片的描述
  • 原文地址:https://www.cnblogs.com/chenlijing/p/12689647.html
Copyright © 2020-2023  润新知