【问题标题】:read data from MultipartFile which has csv uploaded from browser从浏览器上传 csv 的 MultipartFile 读取数据
【发布时间】:2015-10-15 08:40:12
【问题描述】:

可能我是通过使用 MultipartFile 上传功能来做的。

我必须从客户端通过浏览器选择的 csv 文件中读取数据。我使用 MultipartFile 上传文件。该文件即将到达控制器,但现在我无法从中读取 csv 数据。请指导最好的方法或帮助我从 MultipartFile 读取 csv 数据。 该jsp有

    <form method="POST" action="uploadFile" enctype="multipart/form-data">
            File to upload: <input type="file" name="file"> <input
                type="submit" value="Upload"> Press here to upload the
            file!
        </form>

控制器有

@RequestMapping(value = "/uploadFile", method = RequestMethod.POST)
public String uploadFileHandler(@RequestParam("file") MultipartFile file) {

谢谢。

【问题讨论】:

  • 您是否遇到错误?或者您是否尝试使用正在寻找 File 对象的类来处理 MultipartFile?您需要提供有关您正在尝试做的事情或您看到的结果的更多信息。

标签: spring spring-mvc csv


【解决方案1】:

我使用缓冲区逐行读取并从多部分输入流中获取。也许是更多的代码,但我发现逐行阅读文本文件很有帮助。

BufferedReader br;
List<String> result = new ArrayList<>();
try {

     String line;
     InputStream is = multipart.getInputStream();
     br = new BufferedReader(new InputStreamReader(is));
     while ((line = br.readLine()) != null) {
          result.add(line);
     }

  } catch (IOException e) {
    System.err.println(e.getMessage());       
  }

【讨论】:

    【解决方案2】:

    我想出了一个解决方法。我将文件转换为字节,然后将字节转换为字符串。从 String 我应用 string.split() 以从文件中获取我想要的内容。

        @RequestMapping(value = "/uploadFile", method = RequestMethod.POST)
    public String uploadFileHandler(@RequestParam("file") MultipartFile file) {
        if (!file.isEmpty()) {
            try {
                byte[] bytes = file.getBytes();
                String completeData = new String(bytes);
                String[] rows = completeData.split("#");
                String[] columns = rows[0].split(",");
    

    【讨论】:

      【解决方案3】:

      我找到的最佳解决方案是

      @PostMapping(value="/csv")
      public ResponseEntity<Void> processUpload(@RequestParam MultipartFile file) {
      
      BufferedReader fileReader = new BufferedReader(new 
      InputStreamReader(file.getInputStream(), "UTF-8"));
      CSVParser csvParser = new CSVParser(fileReader, CSVFormat.DEFAULT);
      
      Iterable<CSVRecord> csvRecords = csvParser.getRecords();
      
      for (CSVRecord csvRecord : csvRecords) {
          System.out.println(csvRecord);
      }
      ...
      

      这是来自https://bezkoder.com/spring-boot-upload-csv-file/的自适应解决方案

      【讨论】:

        猜你喜欢
        • 2018-04-10
        • 1970-01-01
        • 2017-05-16
        • 2018-03-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-12-18
        • 2023-03-07
        相关资源
        最近更新 更多