SpringBoot文件上传(本地存储)

有时,我们上传的文件会直接存放在本地(linux服务器)上,现在直接开始实战:

  • 依赖

    <!-- mvc的自动配置 -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    
  • yml配置,配置文件上传大小限制,因为其默认限制是1mb,所以上传文件稍大就会失败

    # 设置内置Tomcat请求大小为20MB
    server.tomcat.max-http-form-post-size=20MB
    # 设置请求最大大小为20MB
    spring.servlet.multipart.max-request-size=20MB
    # 设置文件上传最大大小为20MB
    spring.servlet.multipart.max-file-size=20MB
    
    
  • 设置全局常量以及配置mvc映射

    public class GlobalConstant {
    
        //上传文件路径
        public static final String FILE_REAL_PATH = "file:d:/file/";
    
        //映射路径
        public static final String FILE_MAPPING_PATH = "/file/**";
    
        //映射路径前缀
        public static final String FILE_MAPPING_PATH_PREFIX ="/file/";
       
    }
    
    @Configuration
    public class MvcConfig implements WebMvcConfigurer {
        
        /**
         * 设置上传文件映射
         * @param registry
         */
        @Override
        public void addResourceHandlers(ResourceHandlerRegistry registry) {
            registry.addResourceHandler(GlobalConstant.FILE_MAPPING_PATH)
                    .addResourceLocations(GlobalConstant.FILE_REAL_PATH);
        }
    }
    
  • 页面

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>文件上传</title>
    </head>
    <body>
    
    <form enctype="multipart/form-data" method="POST" action="/sysFile/upload">
        <input type="file" name="file" />
        <input type="submit" value="upload" />
    </form>
    
    </body>
    </html>
    
  • controller

    @Controller
    @RequestMapping("/sysFile")
    public class SysFileController {
    
        @Autowired
        private ISysFileService fileService;
    
    
        @GetMapping("/toFilePage")
        public String toFilePage(){
            return "file";
        }
    
        @PostMapping("/upload")
        @ResponseBody
        public AjaxResult upload(@RequestParam(value = "file", required = true) MultipartFile file) throws Exception {
    
            //文件不为空
            if(file.isEmpty()){
                throw new ServiceException("上传文件不能为空");
            }
    
            //真实上传路径是否存在,不存在创建该路径
            File fileRealPath = new File(GlobalConstant.FILE_REAL_PATH);
            if(!fileRealPath.exists()){
                fileRealPath.mkdirs();
            }
    
            //开始处理上传文件
            String fileName = file.getOriginalFilename();
            String newFileName = getTime()+ "_" + fileName;
            file.transferTo(new File(fileRealPath, newFileName));
    
            //把虚拟路径存进数据库
            SysFile sysFile = new SysFile();
            sysFile.setFileName(fileName);
            sysFile.setFileUrl(GlobalConstant.FILE_MAPPING_PATH_PREFIX + newFileName);
            fileService.save(sysFile);
    		
            return AjaxResult.suc();
        }
    	
        //新图片名称前缀
        public String getTime(){
            String curTime = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"));
            return curTime;
        }
    }
    

准备完成之后,访问http://localhost:8080/sysFile/toFilePage,上传我们的图片,可以看到D盘存储了我们上传的图片,并且虚拟路径存进数据库在这里插入图片描述
等下图片回显访问http://localhost:8080/file/20220506134146_test.jpg就可以显示了

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值