Как создать список загруженных файлов в Spring Boot?

#java #spring #spring-boot

#java #spring #spring-boot

Вопрос:

Я хочу создать список загруженных файлов, которые хранятся в каталоге на моем жестком диске.

Мой контроллер:

 @Controller 
class MyFileUploadController {


    @RequestMapping(value = "/uploadOneFile", method = RequestMethod.GET)
    public String uploadOneFileHandler(Model model) {

        MyUploadForm myUploadForm = new MyUploadForm();
        model.addAttribute("myUploadForm", myUploadForm);

        return "uploadOneFile";
    }


    @RequestMapping(value = "/uploadOneFile", method = RequestMethod.POST)
    public String uploadOneFileHandlerPOST(HttpServletRequest request, //
                                           Model model, //
                                           @ModelAttribute("myUploadForm") MyUploadForm myUploadForm) {

        return this.doUpload(request, model, myUploadForm);

    }


    @RequestMapping(value = "/uploadMultiFile", method = RequestMethod.GET)
    public String uploadMultiFileHandler(Model model) {

        MyUploadForm myUploadForm = new MyUploadForm();
        model.addAttribute("myUploadForm", myUploadForm);

        return "uploadMultiFile";
    }


    @RequestMapping(value = "/uploadMultiFile", method = RequestMethod.POST)
    public String uploadMultiFileHandlerPOST(HttpServletRequest request, //
                                             Model model, //
                                             @ModelAttribute("myUploadForm") MyUploadForm myUploadForm) {

        return this.doUpload(request, model, myUploadForm);

    }

    private String doUpload(HttpServletRequest request, Model model, //
                            MyUploadForm myUploadForm) {

        String description = myUploadForm.getDescription();
        System.out.println("Description: "   description);


        String uploadRootPath = request.getServletContext().getRealPath("upload");
        System.out.println("uploadRootPath="   uploadRootPath);

        File uploadRootDir = new File("(directory)");

        if (!uploadRootDir.exists()) {
            uploadRootDir.mkdirs();
        }
        MultipartFile[] fileDatas = myUploadForm.getFileDatas();

        List<File> uploadedFiles = new ArrayList<File>();
        List<String> failedFiles = new ArrayList<String>();

        for (MultipartFile fileData : fileDatas) {


            String name = fileData.getOriginalFilename();
            System.out.println("Client File Name = "   name);

            if (name != null amp;amp; name.length() > 0) {
                try {

                    File serverFile = new File(uploadRootDir.getAbsolutePath()   File.separator   name);

                    BufferedOutputStream stream = new BufferedOutputStream(new 
                    FileOutputStream(serverFile));
                    stream.write(fileData.getBytes());
                    stream.close();

                    uploadedFiles.add(serverFile);
                    System.out.println("Write file: "   serverFile);
                } catch (Exception e) {
                    System.out.println("Error Write file: "   name);
                    failedFiles.add(name);
                }
            }
        }
        model.addAttribute("description", description);
        model.addAttribute("uploadedFiles", uploadedFiles);
        model.addAttribute("failedFiles", failedFiles);
        return "uploadResult";
    }
}

  

MyUploadForm

 public class MyUploadForm {

    private String description;


    private MultipartFile[] fileDatas;

    public String getDescription() {
        return description;
    }

    public void setDescription(String description) {
        this.description = description;
    }

    public MultipartFile[] getFileDatas() {
        return fileDatas;
    }

    public void setFileDatas(MultipartFile[] fileDatas) {
        this.fileDatas = fileDatas;
    }

}
  

Пользователь может загружать свои файлы на uploadOneFile.html .

uploadOneFile.html

 <!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org" xmlns:c="http://java.sun.com/xml/ns/javaee">

<head>
    <meta charset="UTF-8">
    <title>Upload One File</title>
</head>

<body>
<th:block th:include="/_menu"></th:block>

<h3>Upload single file:</h3>

<form th:object="${myUploadForm}" method="POST"
      action="" enctype="multipart/form-data">
    Beschreibung:
    <br>
    <input th:field="*{description}" style="width:300px;"/>
    <br/><br/>
    File to upload: <input th:field="*{fileDatas}" type="file"/>
    <br/>
    <input type="submit" value="Upload">
</form>
</body>
</html>
  

Затем загруженные файлы должны отображаться на странице индекса. Также должна быть возможность загружать файлы, просто щелкнув по ним.

Я новичок в Spring Boot, так что вы можете мне помочь? Если вам нужна дополнительная информация, дайте мне знать.

Ответ №1:

Вы можете создать таблицу на этой странице (html-макет, который вы можете выбрать в соответствии с дизайном и т. Д.)

Основная логика может быть:-

  • Получить список файлов из каталога.
  • Храните имена файлов в НАБОРЕ или СПИСКЕ или что-то по вашему выбору.
  • Передайте предыдущий список в пользовательский интерфейс, используя некоторую модель, через контроллер индексной страницы.
  • Визуализируйте список файлов.
  • Щелкнув по определенному файлу, вызовите конечную точку, чтобы загрузить файл по имени.

Некоторый исходный код, представляющий интерес, может быть похож на приведенный ниже:-

 
File directoryPath = new File("D:\PATH\OF\DIRECTORY");
FileFilter textFilefilter = new FileFilter(){
    public boolean accept(File file) {
    boolean isFile = file.isFile();
        if (isFile) {
           return true;
        } else {
           return false;
        }
    }
};
//List of all the files (only files)
File filesList[] = directoryPath.listFiles(textFilefilter);
System.out.println("List of the files in the specified directory:");
for(File file : filesList) {
    System.out.println("File-name: " file.getName());
    System.out.println("File-path: " file.getAbsolutePath());
    System.out.println("Size: " file.getTotalSpace());
    System.out.println(" ");
}