从MultipartFile读取数据,该数据包含从浏览器上传的csv

时间:2015-10-15 08:40:12

标签: spring spring-mvc csv

可能是我正在使用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) {

感谢。

3 个答案:

答案 0 :(得分:18)

我使用缓冲区逐行读取并从多部分获取输入流。也许是更多的代码,但我找到了有用的阅读文本文件。

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

答案 1 :(得分:8)

我想出了一个解决方法。我将文件转换为字节,然后将字节转换为String。从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(",");

答案 2 :(得分:0)

我发现的最佳解决方案是

@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/

的一种自适应解决方案