springboot 上传文件保存

File

注意:File对象其本质只是表示一个路径

构造函数:File(String pathname),该参数pathname可以是绝对路径也可以是相对路径(如果是相对路径的话会默认表示成在该项目之下,建议使用绝对路径更容易把控)

public boolean exists();测试改文件或目录是否存在

public boolean mkdirs();创建此抽象路径名指定的目录,包括创建必需但不存在的父目录(注意,这个方法只能创建目录而不能创建文件)

public boolean mkdir();创建此抽象路径名指定的单个目录(注意,这个方法只能创建目录而不能创建文件)

boolean createNewFile();创建单个文件,作用与mkdir()相似都不能创建必需但不存在的父目录,区别是mkdir()创建的是目录,createNewFile()创建的是文件

MultipartFile

multipartfile是spring提供的类,专门用于获取"multipart/form"提交的文件

String getOriginalFilename();获取原文件名

void transferTo(File dest);将文件转移到目标文件中

transferTo()方法很强大,不仅仅是将文件输入输出进行了封装,提高了开发效率,更重要的是其可以将文件夹直接变为文件

(即:multipartfile.transferTo(file)中,当file代表的是一个目录时,正常情况文件是无法输入的,而transferTo()方法会将该目录直接变为文件并输入数据)

ClassUtilsClassUtils是spring提供的类

最常用的方法是ClassUtils.getDefaultClassLoader().getResource("").getPath():可以获取classes目录绝对路径,获取当前项目的classes绝对路径。

ClassUtils来自spring框架,getDefaultClassLoader()返回类加载器(ClassLoader类)

注意:getResource("")中的参数为空字符串

URLDecoder

是Java自带的类,里面只有一个方法:URLDecoder.decode(String s, String enc),用于解决URL的编码问题

例如在springboot需要获取项目的classes路径时,若路径上包含有空格,取得的字符串就需要用 URLDecoder.decode(string,"utf-8") 才能将空格显示出来

案例

@RestController
public class Test18 {
    /*
     * 接收文件
     * 更改文件名并存放文件
     * 返回json
     * */
    @PostMapping("test18")
    public String Test18(HttpServletRequest request, @RequestParam("file") MultipartFile file) throws UnsupportedEncodingException {
        String filename = file.getOriginalFilename();
        String filetype = filename.substring(filename.lastIndexOf("."));
        String newfile = UUID.randomUUID()+filetype;
        String classespath = ClassUtils.getDefaultClassLoader().getResource("").getPath();
        /*解决文件路径中的空格问题*/
        String decodeClassespath = URLDecoder.decode(classespath,"utf-8");
        System.out.println(decodeClassespath);
        /**/
        File file1 = new File(decodeClassespath+"/image"+"/test"+"/"+newfile);
        if(!file1.exists()){
            file1.mkdirs();
        }
        try {
            file.transferTo(file1);
            return "上传成功";
        } catch (IOException e) {
            e.printStackTrace();
        }
        return "上传失败";
    }
}
posted @ 2021-02-21 17:53  某菜狗  阅读(1084)  评论(0编辑  收藏  举报