文件上传操作

前端:

  <form method="post" action="/file/upload" enctype="multipart/form-data">
      <p>Type: <input type="text" name="type" value="multiPartFileSingle" size="60" /></p>
      <p>File 1: <input type="file" name="files" size="60" /></p>
      <p>File 2: <input type="file" name="files" size="60" /></p>
      <p><input type="submit" value="Upload" /></p>
  </form>

后端:

 @RequestMapping(value = "/upload", method = RequestMethod.POST)
    public String upload(@RequestParam("files") MultipartFile[] files, Model model) {

        MyFile myFile = new MyFile();
        String source;
        String target;
        String difference;
        try {
            BufferedReader sourceBufferedReader = new BufferedReader(new InputStreamReader(files[0].getInputStream()));
            BufferedReader sourceBufferedReaderForParse = new BufferedReader(new InputStreamReader(files[0].getInputStream()));
            BufferedReader targetBufferedReader = new BufferedReader(new InputStreamReader(files[1].getInputStream()));
            BufferedReader targetBufferedReaderForParse = new BufferedReader(new InputStreamReader(files[1].getInputStream()));

            source = parseBufferedReader(sourceBufferedReaderForParse);
            target = parseBufferedReader(targetBufferedReaderForParse);

            List<String> strings = fileService.differFiles(sourceBufferedReader, targetBufferedReader);

            StringBuilder stringBuilder = new StringBuilder();

            for (String string : strings) {
                stringBuilder.append(string);
            }

            difference = stringBuilder.toString();

            myFile.setSource(source);
            myFile.setTarget(target);
            myFile.setDifference(difference);
            myFile.setDiffDate(new Date());

            fileDao.insertFile(myFile);

        } catch (IOException e) {
            logger.error("Exception occurs when read line from BufferedReader!");
        }

        model.addAttribute("files", fileDao.selectFiles());
        return "list";
    }

BufferedReader到String的转换:

    private String parseBufferedReader(BufferedReader bufferedReader) {

        StringBuilder stringBuilder = new StringBuilder();
        try {
            String tempString = bufferedReader.readLine();
            while (tempString != null) {
                stringBuilder.append(tempString);
                tempString = bufferedReader.readLine();
            }
        } catch (IOException e) {
            logger.error("Exception occurs when read line from BufferedReader!");
        }
        return stringBuilder.toString();
    }

这些代码实现了文件上传,并且获取上传文件的inputStream,再转换为字符串进行上传文件的处理.

现存问题:

1.引文bufferedReader读一次就清空,所以在用到两次bufferedReader的时候进行了两次新建bufferedReader.这种设计非常不好,对内存资源是一种浪费.以下代码就比较恶心.

            BufferedReader sourceBufferedReader = new BufferedReader(new InputStreamReader(files[0].getInputStream()));
            BufferedReader sourceBufferedReaderForParse = new BufferedReader(new InputStreamReader(files[0].getInputStream()));
            BufferedReader targetBufferedReader = new BufferedReader(new InputStreamReader(files[1].getInputStream()));
            BufferedReader targetBufferedReaderForParse = new BufferedReader(new InputStreamReader(files[1].getInputStream()));

2.上传文件后对文件可以直接进行处理,如果将MultipartFile先存为File,再将文件读入内存进行处理就非常挫.因为做了一次无谓的IO.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值