簡體   English   中英

如何在 Spring Boot 中創建上傳文件的列表?

[英]How to create a list of uploaded files in 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 && 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";
    }
}

我的上傳表格

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 上上傳他的文件。

上傳一個文件.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 的初學者,你能幫我嗎? 如果您需要更多信息,請告訴我。

您可以在該頁面上創建一個表格(您可以根據設計等選擇 html 布局。)

主要邏輯可以是:-

  • 從目錄中獲取文件列表。
  • 將文件名存儲在 SET 或 LIST 或您選擇的內容中。
  • 使用某個模型通過索引頁面控制器將上一個列表傳遞到 UI。
  • 渲染文件列表。
  • 單擊特定文件后,調用端點以按名稱下載文件。

一些最初感興趣的代碼可能如下所示:-


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(" ");
}
 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM