文件上传操作
来源:互联网 发布:建筑工程成本核算软件 编辑:程序博客网 时间: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
- php文件上传操作
- 操作文件与上传
- 文件上传操作
- 文件上传操作
- 上传文件操作类
- 文件上传操作
- PHP文件上传操作
- PHP文件上传操作
- git文件上传操作
- 联网上传文件操作
- thnkphp文件上传操作
- 文件的操作上传
- 文件上传基本操作
- Asp.net 文件上传操作
- Asp.net文件上传操作
- Asp.net文件上传操作
- android文件的上传操作
- 文件上传的基本操作
- 注意 scanf_s
- WORD文档误删除、误清空等恢复的几种方法
- poj-1591-M*A*S*H
- Shell中字符串分割的三种方法
- 你应该知道的16个Linux服务器监控命令
- 文件上传操作
- su与sudo
- 二叉树——已知二叉树先序,建树,并输出中序、后序,并求树叶数和深度
- emacs快捷键
- Java中List Set Map 是否有序等总结
- & 0xfo,&0x0f
- 【面试三十六计】-【1】-【多线程、并发】
- 作为独立开发者,有哪些可以分享的经验?
- Android RadioGroup 换行, 支持多行多列