springboot实现单文件上传和多文件上传(注释详细,最新版本)

关于文件,我一般都是存在oss里面的,因为比赛可能要用到,所以又去学了一下存在服务器里面,关于这里,我是存本地目录的

单文件上传

首先创建一个springBoot项目,这个就不说了
然后创建一个文件上传的html页面

<!DOCTYPE html>
<html  xmlns:th="http://www.thymeleaf.org" >
<head>
    <meta charset="UTF-8">
    <title>文件上传</title>
</head>
<body>

<form method="post" th:action="@{/file}" enctype="multipart/form-data">
    作者:<input type="text" name="name">
    文件 <input type="file" name="file">
    <input type="submit" name="提交">
</form>
</body>
</html>

这里的表单一定要添加**enctype=“multipart/form-data”**属性,这块不清楚的可以去看一下Html表单
然后是controller层的代码。

  //单文件接口
    @RequestMapping("/file")
    @ResponseBody
    public String file(MultipartFile file,String name){
        System.out.println(name+"上传了");
        return fileService.upload(file);
    }

使用MultipartFile类来处理文件上传
接下来是Servlce层的代码,接口我就不复制了,


@Service
public class FileServiceImpl implements FileService {
    @Override
    public String upload(MultipartFile multipartFile) {
       if(multipartFile.isEmpty()){
           return "上传文件不能为空";
       }
       //写入时可能有异常,
       try{
           //1、设置文件存储位置
           String path="E:\\java\\文件";
           File f=new File(path);
           if(!f.exists()){
               //如果文件路径不存在,则创建
               f.mkdir();
           }
           // 文件写入
           //multipartFile.getOriginalFilename()//获取文件原名称
           //System.currentTimeMillis();//获取当前时间戳
           File dir=new File(path+"\\"+System.currentTimeMillis()+multipartFile.getOriginalFilename());
           multipartFile.transferTo(dir);
           return "文件上传成功";
       }catch (Exception e){
           e.printStackTrace();
           return "文件上传失败";
       }
    }

说一下需要注意的地方,
1、在文件命名时,最后使用当前时间戳,避免文件名重复导致文件被覆盖
2、一定要处理异常,最好是当前自己处理,不要抛出
3、在设置文件储存位置时,在项目开发中,通过配置文件来设置,上面只是学习,为了方便。

多文件上传

还是一样,创建一个Html页面

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>多文件上传</title>
</head>
<body>
<form method="POST" enctype="multipart/form-data" th:action="@{/files}">
    <p>文件1</p> <input type="file" name="file">
    <p>文件2</p><input type="file" name="file">
    <p><input type="submit" value="上传"></p>


</form>

</body>
</html>

这里需要注意的是,多文件上传时,接受文件的input控件名字是一样的,在后台我们接受的是一个文件数组

然后是controller层的代码。

//多文件接口
    @RequestMapping("/files")
    @ResponseBody
    //多文件上传必须加@RequestParm()注解来确定上传的文件数组
    public String files(@RequestParam("file") MultipartFile[] files){
//        System.out.println(files.length);
        System.out.println(files==null);
        return fileService.uploads(files);
    }

需要注意的是 多文件上传必须加@RequestParm()注解来确定上传的文件数组

接下来是Servlce层的代码

@Override
    public String uploads(MultipartFile[] files) {
        //判断文件数组是否为空或者长度为0
        if(files!=null&&files.length>0){
            //设置文件存放路径
            String filepath="E:\\java\\文件\\";
            for(MultipartFile mf :files){
                //获取文件后缀
                //String suffixName = fileName.substring(fileName.lastIndexOf("."));
//                // 重新生成文件名
//                fileName = UUID.randomUUID()+suffixName;

                //获取原文件名称
                String filename=mf.getOriginalFilename();
                if(mf.isEmpty()){
                    //文件是否为空
                    return "文件上传失败,文件为空";
                }
                //创建文件
                File dir=new File(filepath+System.currentTimeMillis()+filename);
                try{
                    //写入文件
                    mf.transferTo(dir);
                    System.out.println("上传成功");
                    return "文件上传成功";
                }catch (IOException e){
                    return "文件失败";
                }

            }
            System.out.println("多文件上传成功");
        }
        return "文件不能为空a";
    }

}

你可能感兴趣的:(javaweb学习笔记,java,spring,spring,boot)