單個檔案上傳和批量檔案上傳

素衣黛眉發表於2022-05-10

一、單個檔案上傳

前端程式碼可參考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("======================");
            }
        }
    }
  • 結果:
    儲存的路徑

相關文章