文件上传操作

来源:互联网 发布:建筑工程成本核算软件 编辑:程序博客网 时间:2024/06/06 17:47

前端:

  <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.

0 0