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

2023-11-10

关于文件,我一般都是存在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";
    }

}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

  • 动态选择端口号?

    在 Java 中 我需要获取端口号以在同一程序的多个实例之间进行通信 现在 我可以简单地选择一些固定的数字并使用它 但我想知道是否有一种方法可以动态选择端口号 这样我就不必打扰我的用户设置端口号 这是我的一个想法 其工作原理如下 有一个固定
  • org.apache.hadoop.security.AccessControlException:客户端无法通过以下方式进行身份验证:[TOKEN,KERBEROS] 问题

    我正在使用 java 客户端通过 Kerberos 身份验证安全访问 HDFS 我尝试打字klist在服务器上 它显示已经存在的有效票证 我收到的异常是客户端无法通过以下方式进行身份验证 TOKEN KERBEROS 帮助将不胜感激 这是一
  • 如何在 Spring-JUnit 测试中设置 JNDI 查找?

    我正在使用 Maven 3 0 3 Spring 3 1 0 RELEASE 和 JUnit 4 8 1 如何在容器外部创建 JNDI 功能 在我的例子中是 JBoss 我认为 Spring 的 jndiTemplate 可以解决这个问题
  • Java 公历日历更改时区

    我正在尝试设置 HOUR OF DAY 字段并更改 GregorianCalendar 日期对象的时区 GregorianCalendar date new GregorianCalendar TimeZone getTimeZone GM
  • 将流转换为 IntStream

    我有一种感觉 我在这里错过了一些东西 我发现自己做了以下事情 private static int getHighestValue Map
  • volatile、final 和synchronized 安全发布的区别

    给定一个带有变量 x 的 A 类 变量 x 在类构造函数中设置 A x 77 我们想将 x 发布到其他线程 考虑以下 3 种变量 x 线程安全 发布的情况 1 x is final 2 x is volatile 3 x 设定为同步块 sy
  • 如何在用户输入数据后重新运行java代码

    嘿 我有一个基本的java 应用程序 显示人们是成年人还是青少年等 我从java开始 在用户输入年龄和字符串后我找不到如何制作它它们被归类为 我希望它重新运行整个过程 以便其他人可以尝试 的节目 我一直在考虑做一个循环 但这对我来说没有用
  • Spring Boot Data JPA 从存储过程接收多个输出参数

    我尝试通过 Spring Boot Data JPA v2 2 6 调用具有多个输出参数的存储过程 但收到错误 DEBUG http nio 8080 exec 1 org hibernate engine jdbc spi SqlStat
  • 当 OnFocusChangeListener 应用于包装的 EditText 时,TextInputLayout 没有动画

    不能比标题说得更清楚了 我有一个由文本输入布局包裹的 EditText 我试图在 EditText 失去焦点时触发一个事件 但是 一旦应用了事件侦听器 TextInputLayout 就不再对文本进行动画处理 它只是位于 editText
  • Java ResultSet 如何检查是否有结果

    结果集 http java sun com j2se 1 4 2 docs api java sql ResultSet html没有 hasNext 方法 我想检查 resultSet 是否有任何值 这是正确的方法吗 if resultS
  • tomcat 中受密码保护的应用程序

    我正在使用 JSP Servlet 开发一个Web应用程序 并且我使用了Tomcat 7 0 33 as a web container 所以我的要求是tomcat中的每个应用程序都会password像受保护的manager applica
  • 如何访问JAR文件中的Maven资源? [复制]

    这个问题在这里已经有答案了 我有一个使用 Maven 构建的 Java 应用程序 我有一个资源文件夹com pkg resources 我需要从中访问文件 例如directory txt 我一直在查看各种教程和其他答案 但似乎没有一个对我有
  • 在我的 Spring Boot 示例中无法打开版本 3 中的 Swagger UI

    我在 Spring Boot 示例中打开 swagger ui 时遇到问题 当我访问 localhost 8080 swagger ui 或 localhost 8080 root api name swagger ui 时出现这种错误 S
  • 获取文件的总大小(以字节为单位)[重复]

    这个问题在这里已经有答案了 可能的重复 java 高效获取文件大小 https stackoverflow com questions 116574 java get file size efficiently 我有一个名为 filenam
  • 专门针对 JSP 的测试驱动开发

    在理解 TDD 到底是什么之前 我就已经开始编写测试驱动的代码了 在没有实现的情况下调用函数和类可以帮助我以更快 更有效的方式理解和构建我的应用程序 所以我非常习惯编写代码 gt 编译它 gt 看到它失败 gt 通过构建其实现来修复它的过程
  • Cucumber 0.4.3 (cuke4duke) 与 java + maven gem 问题

    我最近开始为 Cucumber 安装一个示例项目 并尝试使用 maven java 运行它 我遵循了这个指南 http www goodercode com wp using cucumber tests with maven and ja
  • 干净构建 Java 命令行

    我正在使用命令行编译使用 eclipse 编写的项目 如下所示 javac file java 然后运行 java file args here 我将如何运行干净的构建或编译 每当我重新编译时 除非删除所有内容 否则更改不会受到影响 cla
  • 创建一个 JSON 对象以在 Spring Boot 测试中发布

    我想编写基本测试来使用 JSON 负载在 users URL 上执行 POST 请求来创建用户 我找不到如何将新对象转换为 JSON 到目前为止有这么多 这显然是错误的 但解释了目的 Test public void createUser
  • 在java中为组合框分配键

    我想添加一个JComboBox在 Swing 中这很简单 但我想为组合中的每个项目分配值 我有以下代码 JComboBox jc1 new JComboBox jc1 addItem a jc1 addItem b jc1 addItem
  • Spring Boot 无法更新 azure cosmos db(MongoDb) 上的分片集合

    我的数据库中存在一个集合 documentDev 其分片键为 dNumber 样本文件 id 12831221wadaee23 dNumber 115 processed false 如果我尝试使用以下命令通过任何查询工具更新此文档 db

随机推荐