SpringBoot文件上传代码迭代

概述

在使用SpringBoot进行文件上传的时候,一般都会按照如下代码进行,如果没有思路的话,底部有一文章连接,可以参考,如下代码倒是可以实现功能了,但是你会看着有一点乱,我们的想法是迭代一下,让代码更加清晰

	@PostMapping
    public ResponseEntity changeHeadImg(@RequestParam MultipartFile files, HttpServletRequest request){

        /*
            1.图片转存
            2.路径返回
         */
		
		//获取文件后缀名
        String filename = files.getOriginalFilename();
        String suffix = filename.substring(filename.lastIndexOf("."));
        String imgname = System.currentTimeMillis()+suffix;
		
		// url诸如 2020/10/12
        String url = File.separator
                +LocalDate.now().getYear()
                +File.separator
                +LocalDate.now().getMonthValue()
                +File.separator
                +LocalDate.now().getDayOfMonth()
                +File.separator
                ;
		
		//imgUrl 诸如 2020/10/12/dafdfgeqw.jpg
        String imgUrl = url + imgname;
		
		//path 诸如 d:/2020/10/12/dafdfgeqw.jpg
        String path = fileStorePath+imgUrl;
		
        File fileStore = new File(fileStorePath+url);

        if (!fileStore.exists()){
            fileStore.mkdirs();
        }

        try {
            files.transferTo(new File(path));
        } catch (IOException e) {
            log.info("无法保存用户头像");
            e.printStackTrace();
        }

        FileInfo fileInfo = new FileInfo();
        fileInfo.setContentType(request.getContentType());
        fileInfo.setSize(files.getSize());
        fileInfo.setPath(path);
        fileInfo.setUrl(imgUrl);
        fileInfo.setType(1);
        fileInfo.setCreateTime(LocalDateTime.now());
        fileInfo.setUpdateTime(LocalDateTime.now());
		
		//写入到数据库并保存
        fileInfoService.save(fileInfo);

        return new ResponseEntity(HttpStatus.OK);
    }

迭代

迭代的总体思路是,把一些变量抽取出来,一些路上上的变量抽出来成为一个函数,方便公用

	private final static String fileStorePath = "d:"+File.separator+"files";

    @Override
    @Transactional
    public MytryFileInfo upload(MultipartFile file) throws IOException {
		
		/*
		因为文件的后缀名就使用次数不多,单独写一个变量显得有点多余,
		于是就直接通过MultipartFile中直接获取了,这样显得代码比较清晰
		*/
        String suffix = file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf("."));
		
		//原来的url抽取成为了一个 getPath函数,可以看到到处都是getPath函数,更加清晰了
        String url =  getPath()+System.currentTimeMillis()+suffix;

        File fileStore = new File(fileStorePath,getPath());

        if (!fileStore.exists()){
            fileStore.mkdirs();
        }

        file.transferTo(new File(fileStorePath,url));

        MytryFileInfo mytryFileInfo = new MytryFileInfo();
        mytryFileInfo.setPath(fileStorePath+url);
        mytryFileInfo.setUrl(url);
        //文件类型
        mytryFileInfo.setType("1");
        mytryFileInfo.setUserId(UserUtil.getCurrentUser().getId());

        mytryFileInfoDao.insert(mytryFileInfo);

        return mytryFileInfo;
    }

    private String getPath(){

        return File.separator + LocalDate.now().toString().replace("-",File.separator) + File.separator;

    }

如下文章,比较适合刚开始练习文件上传
文件上传

上一篇:linux宝塔面板 PHP fileinfo扩展怎么安装


下一篇:C++读取一个文件下所有文件