【问题标题】:how to work with a List of uploaded files in Spring?如何在 Spring 中使用上传文件列表?
【发布时间】:2021-06-19 09:00:07
【问题描述】:

很抱歉,我没有找到这样的问题,所以我创建了一个新问题。

我学习 Java,这是我第一个真正的实践项目。 我需要制作一个文件解析器。所以我为一个文件做了它并且它有效。 但我需要它来处理文件目录。

所以,在视图中我已经改变了

File to parse: <input type="file" th:field="*{address}" id="address">

开

File to parse: <input type="file" th:field="*{address}" id="address" webkitdirectory directory multiple>

在View中效果很好,我现在可以选择所有目录了。

但是我应该如何更改我的控制器以不使用一个文件而是使用文件列表? 我应该创建新模型吗?

我看到的另一种方式,在查看目录的方式中选择,而不是文件。但我没有找到,如何使用文件资源管理器(就像浏览器使用输入类型 =“文件”一样)。

另外,我做了这个类,它可以解析几个文件。主要问题是如何在多个文件的情况下与视图和逻辑建立“关系”。

有人可以帮忙吗? 非常感谢!

我的文件模型:

public class File {
    private String address;

    public File() {
    }

    public File(String address) {
        this.address = address;
    }

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }
}

我的控制器:

@Controller
@RequestMapping("/parser")
public class ParserController {


    private final FileParser fileParser;

    @Autowired
    public ParserController(FileParser fileParser) {
        this.fileParser = fileParser;
    }

    @GetMapping()
    public String parser(Model model) {
        model.addAttribute("file", new File());
        return "parser/parser";
    }

    @PostMapping
    public String create(@ModelAttribute("file") File file) throws IOException {
        FileParser.parse(file);
        return "parser/done";
    }
}

我的解析器(它不是真正的逻辑,仅作为示例):

@Component
public class FileParser {
    public static void parse(File file) throws IOException {
        Path pathFrom = Path.of(file.getAddress());
        Path pathTo = Files.createFile(Path.of("C:\\Users\\Xiaomi\\Desktop\\parsedtest.txt"));
        List<String> list = new ArrayList<>();
        list = Files.readAllLines(pathTo);
        list.add("file");
        list.add("was");
        list.add("parsed");
        FileOutputStream fos = new FileOutputStream(String.valueOf(pathTo));
        PrintStream printer = new PrintStream(fos);
        printer.flush();
        printer.close();
        FileWriter writer = new FileWriter(String.valueOf(pathTo));
        for (String lister:
                list) {
            writer.write(lister+"\n");
        }
        writer.close();
    }

并查看:

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>MEL Parser</title>
</head>
<body>
<form enctype="multipart/form-data" method="POST" action="/parser" th:object="${file}">
    File to parse: <input type="file" th:field="*{address}" id="address" webkitdirectory directory multiple>
    <br/>
    <br/>
    <input type="submit" value="Parse">
</form>
</body>
</html>

【问题讨论】:

    标签: java spring upload


    【解决方案1】:

    用一种方法接收多个文件试试这个

    @RequestMapping("/saveProducts")
    public String uploadResources( HttpServletRequest servletRequest, 
                                 @ModelAttribute Product product,
                                 Model model) 
    {
        //Get the uploaded files and store them
        List<MultipartFile> files = product.getImages();
    }
    

    此外,在这种情况下,一种解决方案可以是放置在您的页面上的 javascript 代码,该代码将逐个发送文件

    【讨论】:

      【解决方案2】:
      @PostMapping
          public String create(HttpServletRequest servletRequest,
                               @ModelAttribute("filesList") FilesList filesList,
                               Model model) throws IOException {
              List<MultipartFile> files = filesList.getAddresses();
              List<String> addresses = new ArrayList<>();
              if (null != files && files.size() > 0){
                  for (MultipartFile multipartFile : files) {
                      String address = multipartFile.getOriginalFilename();
                      addresses.add(address);
                  }
              }
                  FileParser.parse(addresses);
              return "parser/done";
          }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-10-28
        • 2018-12-25
        • 2015-08-21
        • 2019-04-15
        • 2021-01-19
        • 1970-01-01
        • 2017-10-23
        • 2011-05-11
        相关资源
        最近更新 更多