ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

单个文件上传和批量文件上传

2022-05-10 11:31:07  阅读:195  来源: 互联网

标签:文件 file1 批量 filePath getName File new multipartFile 上传


一、单个文件上传

前端代码可参考elementUI,后端代码主要上传一个文件MultipartFile multipartFile

@PostMapping("/upload")
  public ObjectRestResponse uploadKnowledge(@RequestParam(value = "multipartFile") MultipartFile multipartFile) throws IOException {
      Map<String, Object> map = new HashMap<String, Object>();
      System.out.println("multipartFile.getOriginalFilename() = " + multipartFile.getOriginalFilename());
      String originalFilename = multipartFile.getOriginalFilename();
      String substring = originalFilename.substring(originalFilename.lastIndexOf('.'));
      System.out.println(multipartFile.getName());
      if (multipartFile != null) {
          // 设置文件名称
          map.put("nameParam", multipartFile.getName());
          // 设置文件名称
          map.put("fileName", multipartFile.getName());
          // 设置文件类型
          map.put("contentType", multipartFile.getContentType());
          // 设置文件大小
          map.put("fileSize", multipartFile.getSize());

          // 创建文件名称
          String fileName = UUID.randomUUID() + substring;
          // 获取到文件的路径信息
          RequestAttributes requestAttributes = RequestContextHolder.getRequestAttributes();
          ServletRequestAttributes servletRequestAttributes = (ServletRequestAttributes) requestAttributes;
          //文件存储路径
          String filePath = "G:\\creo\\product\\" + fileName;

          // 打印保存路径
          System.out.println(filePath);
          // 保存文件的路径信息,因为是本地存的,所以我返回的是可以访问的路径,到时候查可以直接查出来,
          //  将上传文件这个接口抽出来,可以复用,返回的路径可以存到相应的数据库
          map.put("filePath", "192.168.1.125:8765/product/" + fileName);
          // 创建文件
          File saveFile = new File(filePath);
          // 文件保存
          multipartFile.transferTo(saveFile);

      }
      return new ObjectRestResponse().data(map);
  }

postman或者apiFox测试如下:
postman或者apiFox测试

二、批量上传

批量上传主要是传一个路径,然后一层一层的读取文件,将文件上传到服务器中,我的还是上传到本地中。注意上传文件的大小是否有限制,如果报错可以参考:DataBufferLimitException: Exceeded limit on max bytes to buffer : 262144

  • 目标:上传下面这个文件夹
    目标文件夹

  • 后端代码测试:


  @Test
    public void readFiles() throws Exception{
        //上传路径
       String path = "E:\\英语\\【初中英语教资面试】必看资料@Bilibili CocoPolaris";
       readFilesDir(path);
    }

//解析文件夹
private void readFilesDir(String path) throws Exception {
        LinkedList<File> dirList = new LinkedList<>();
        LinkedList<String> fileList = new LinkedList<>();
        File file = new File(path);
        File[] files = file.listFiles();
        for (File file1 : files) {
            if (file1.isDirectory()){
                dirList.add(file1);
            }else {
                FileInputStream fileInputStream = new FileInputStream(file1);
                MockMultipartFile mockMultipartFile = new MockMultipartFile(file1.getName(), file1.getName(), "application/json", fileInputStream);
                //System.out.println("mockMultipartFile = " + mockMultipartFile.getName());
                fileList.add(file1.getAbsolutePath());
                System.out.println("file1 = " + file1.getAbsolutePath());

                // 创建文件名称
                String fileName = UUID.randomUUID() + "."
                        + file1.getName();

                String filePath = "G:\\temp\\" + fileName;
                // 打印保存路径
                System.out.println(filePath);
                // 创建文件
                File saveFile = new File(filePath);

                // 文件保存
                mockMultipartFile.transferTo(saveFile);

            }
        }

        File temp;
        while ((!dirList.isEmpty())){
            temp=dirList.removeFirst();
            if (temp.isDirectory()){
                files = temp.listFiles();
                if (files==null) continue;
                for (File file1 : files) {
                    if (file1.isDirectory()){
                        dirList.add(file1);
                    }else {
                        FileInputStream fileInputStream = new FileInputStream(file1);
                       MockMultipartFile mockMultipartFile = new MockMultipartFile(file1.getName(), file1.getName(), "application/json", fileInputStream);
                       // System.out.println("mockMultipartFile = " + mockMultipartFile.getName());
                        fileList.add(file1.getAbsolutePath());
                        System.out.println("file1 = " + file1.getAbsolutePath());

                        // 创建文件名称
                        String fileName = UUID.randomUUID() + "."
                                + file1.getName();
                        //存储的路径
                        String filePath = "G:\\temp\\" + fileName;
                        // 打印保存路径
                        System.out.println(filePath);
                        // 创建文件
                        File saveFile = new File(filePath);

                        // 文件保存
                        mockMultipartFile.transferTo(saveFile);
                    }
                }
            }else {
                System.out.println("======================");
            }
        }
    }
  • 结果:
    存储的路径

标签:文件,file1,批量,filePath,getName,File,new,multipartFile,上传
来源: https://www.cnblogs.com/jasmine-e/p/16252745.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有