1. 1 public class FileUtil {
  2. 2
  3. 3
  4. 4 /**
  5. 5 * 读取文件内容,作为字符串返回
  6. 6 */
  7. 7 public static String readFileAsString(String filePath) throws IOException {
  8. 8 File file = new File(filePath);
  9. 9 if (!file.exists()) {
  10. 10 throw new FileNotFoundException(filePath);
  11. 11 }
  12. 12
  13. 13 if (file.length() > 1024 * 1024 * 1024) {
  14. 14 throw new IOException("File is too large");
  15. 15 }
  16. 16
  17. 17 StringBuilder sb = new StringBuilder((int) (file.length()));
  18. 18 // 创建字节输入流
  19. 19 FileInputStream fis = new FileInputStream(filePath);
  20. 20 // 创建一个长度为10240的Buffer
  21. 21 byte[] bbuf = new byte[10240];
  22. 22 // 用于保存实际读取的字节数
  23. 23 int hasRead = 0;
  24. 24 while ( (hasRead = fis.read(bbuf)) > 0 ) {
  25. 25 sb.append(new String(bbuf, 0, hasRead));
  26. 26 }
  27. 27 fis.close();
  28. 28 return sb.toString();
  29. 29 }
  30. 30
  31. 31 /**
  32. 32 * 根据文件路径读取byte[] 数组
  33. 33 */
  34. 34 public static byte[] readFileByBytes(String filePath) throws IOException {
  35. 35 File file = new File(filePath);
  36. 36 if (!file.exists()) {
  37. 37 throw new FileNotFoundException(filePath);
  38. 38 } else {
  39. 39 ByteArrayOutputStream bos = new ByteArrayOutputStream((int) file.length());
  40. 40 BufferedInputStream in = null;
  41. 41
  42. 42 try {
  43. 43 in = new BufferedInputStream(new FileInputStream(file));
  44. 44 short bufSize = 1024;
  45. 45 byte[] buffer = new byte[bufSize];
  46. 46 int len1;
  47. 47 while (-1 != (len1 = in.read(buffer, 0, bufSize))) {
  48. 48 bos.write(buffer, 0, len1);
  49. 49 }
  50. 50
  51. 51 byte[] var7 = bos.toByteArray();
  52. 52 return var7;
  53. 53 } finally {
  54. 54 try {
  55. 55 if (in != null) {
  56. 56 in.close();
  57. 57 }
  58. 58 } catch (IOException var14) {
  59. 59 var14.printStackTrace();
  60. 60 }
  61. 61
  62. 62 bos.close();
  63. 63 }
  64. 64 }
  65. 65 }
  66. 66
  67. 67 /*
  68. 68 * 通过流的方式上传文件
  69. 69 * @RequestParam("file") 将name=file控件得到的文件封装成CommonsMultipartFile 对象
  70. 70 * org.springframework.web.multipart.commons.CommonsMultipartFile(类)
  71. 71 * 中间会生成临时文件,会自动删除
  72. 72 * 效率NO.3
  73. 73 * 稍微大的文件超时,jq.js会报10254错误,前端显示404不过文件可以上传
  74. 74 * 需要在在dispatcher.xml里面配置试图解析器(<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">)
  75. 75 */
  76. 76
  77. 77 public static void fileUpload1(CommonsMultipartFile file) throws IOException {
  78. 78 // FileItem fff=file.getFileItem();
  79. 79 // System.out.println(fff.getName()+"<<<<getName()>>>>");
  80. 80 // System.out.println(fff.getFieldName()+"<<<<getFieldName()>>>>>"); ;
  81. 81 // System.out.println(fff.isFormField()+"<<<<isFormField()>>>>");
  82. 82 // //在这里面规定上传文件的类型
  83. 83 // System.out.println(fff.getContentType().endsWith(".doc")+"<<<<getContentType()>>>>");
  84. 84 // System.out.println(fff.isInMemory()+"<<<<isInMemory()>>>>");
  85. 85 // System.out.println(fff.getSize()+"<<<<getSize()>>>>");
  86. 86
  87. 87 //用来检测程序运行时间
  88. 88 long startTime=System.currentTimeMillis();
  89. 89 if(file.isEmpty()){
  90. 90 System.out.println("文件不存在(或大小为0)");
  91. 91 return;
  92. 92 }
  93. 93 String renamePath=FileUtil.renameFile(file.getOriginalFilename());
  94. 94 OutputStream os = null;
  95. 95 InputStream is = null;
  96. 96 try {
  97. 97 //获取输出流
  98. 98 os=new FileOutputStream(renamePath);
  99. 99 //获取输入流 CommonsMultipartFile 中可以直接得到文件的流
  100. 100 is=file.getInputStream();
  101. 101 int temp;
  102. 102 //一个一个字节的读取并写入
  103. 103 while((temp=is.read())!=(-1))
  104. 104 {
  105. 105 os.write(temp);
  106. 106 }
  107. 107
  108. 108
  109. 109 } catch (FileNotFoundException e) {
  110. 110 // TODO Auto-generated catch block
  111. 111 e.printStackTrace();
  112. 112 }finally{
  113. 113 os.flush();
  114. 114 os.close();
  115. 115 is.close();
  116. 116 }
  117. 117 long endTime=System.currentTimeMillis();
  118. 118 System.out.println("方法一的运行时间:"+String.valueOf(endTime-startTime)+"ms");
  119. 119 }
  120. 120
  121. 121
  122. 122 /*
  123. 123 * 采用file.Transto 来保存上传的文件【速度最快】
  124. 124 * org.springframework.web.multipart.commons.CommonsMultipartFile(类)
  125. 125 *中间会生成临时文件,会自动删除
  126. 126 * 效率NO.2
  127. 127 * 稍微大的文件超时,jq.js会报10254错误,前端显示404不过文件可以上传
  128. 128 * * 需要在在dispatcher.xml里面配置试图解析器(<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">)
  129. 129
  130. 130 */
  131. 131 public static void fileUpload2(CommonsMultipartFile file) throws IOException {
  132. 132 if(file.isEmpty()){
  133. 133 System.out.println("文件不存在");
  134. 134 return;
  135. 135 }
  136. 136 long startTime=System.currentTimeMillis();
  137. 137 String renameFilePath=FileUtil.renameFile(file.getOriginalFilename());
  138. 138 try{
  139. 139 File newFile=new File(renameFilePath);
  140. 140 //通过CommonsMultipartFile的方法直接写文件(注意这个时候)
  141. 141 file.transferTo(newFile);
  142. 142 }catch (Exception e){
  143. 143 System.out.println("方法2上传文件转换失败");
  144. 144 }
  145. 145
  146. 146 long endTime=System.currentTimeMillis();
  147. 147 System.out.println("方法二的运行时间:"+String.valueOf(endTime-startTime)+"ms");
  148. 148
  149. 149 }
  150. 150
  151. 151 /*推荐使用使用
  152. 152 *采用spring提供的上传文件的方法
  153. 153 * package org.springframework.web.multipart.commons.CommonsMultipartResolver;
  154. 154 * 需要在在dispatcher.xml里面配置试图解析器(<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">)
  155. 155 * 中间会生成临时文件,会自动删除
  156. 156 * 支持多文件上传
  157. 157 * 速度NO.1
  158. 158 */
  159. 159
  160. 160 public static void springUpload(HttpServletRequest request) throws IllegalStateException, IOException
  161. 161 {
  162. 162 long startTime=System.currentTimeMillis();
  163. 163 //将当前上下文初始化给 CommonsMutipartResolver (多部分解析器)
  164. 164 CommonsMultipartResolver multipartResolver=new CommonsMultipartResolver(
  165. 165 request.getSession().getServletContext());
  166. 166 //检查form中是否有enctype="multipart/form-data"
  167. 167 if(multipartResolver.isMultipart(request))
  168. 168 {
  169. 169 //将request变成多部分request
  170. 170 MultipartHttpServletRequest multiRequest=(MultipartHttpServletRequest)request;
  171. 171 //获取multiRequest 中所有的文件名
  172. 172 Iterator iter=multiRequest.getFileNames();
  173. 173 // List<FileItem>
  174. 174 while(iter.hasNext())
  175. 175 {
  176. 176 //一次遍历所有文件
  177. 177 MultipartFile file=multiRequest.getFile(iter.next().toString());
  178. 178 if(file!=null)
  179. 179 {
  180. 180 String renamePath= FileUtil.renameFile(file.getOriginalFilename());
  181. 181 //上传
  182. 182 file.transferTo(new File(renamePath));
  183. 183 }
  184. 184
  185. 185 }
  186. 186
  187. 187 }
  188. 188 long endTime=System.currentTimeMillis();
  189. 189 System.out.println("方法三的运行时间:"+String.valueOf(endTime-startTime)+"ms");
  190. 190
  191. 191 }
  192. 192
  193. 193 /***基于
  194. 194 * commons-fileupload
  195. 195 *commons-io
  196. 196 *上传
  197. 197 *需要注销spring的上传文件解析器
  198. 198 * 因为protected MultipartParsingResult parseRequest(HttpServletRequest request) throws MultipartException {
  199. 199 * String encoding = this.determineEncoding(request);
  200. 200 * FileUpload fileUpload = this.prepareFileUpload(encoding);已经调用FileUpload进行解析封装为自己的对象MultipartParsingResult
  201. 201 * 再次List<FileItem> list = upload.parseRequest(request);解析时为空导致集合为空
  202. 202 * */
  203. 203 public static void fileUpload3(HttpServletRequest request, HttpServletResponse response){
  204. 204 //判断是不是post提交
  205. 205 boolean isMultipart =ServletFileUpload.isMultipartContent(request);
  206. 206 if (isMultipart == true) {
  207. 207 //初始化FiletItem工厂
  208. 208 FileItemFactory fif =new DiskFileItemFactory();
  209. 209 ServletFileUpload upload = new ServletFileUpload(fif);
  210. 210 upload.setHeaderEncoding("utf-8");
  211. 211 try {
  212. 212 //解析表单请求
  213. 213 List<FileItem> list = upload.parseRequest(request);
  214. 214 for (FileItem fi : list) {
  215. 215 //普通表单元素处理start
  216. 216 if (fi.isFormField()) {//判断是不是普通变淡属性
  217. 217 String fieldname = fi.getFieldName();
  218. 218 if (fieldname.equals("productNmae")) {
  219. 219 String projectName = null;
  220. 220 try {
  221. 221 projectName = fi.getString("utf-8");
  222. 222 } catch (UnsupportedEncodingException e) {
  223. 223 System.out.println("不支持utf-8编码");
  224. 224 }
  225. 225 System.out.println(projectName);
  226. 226 } else if (fieldname.equals("file")) {
  227. 227 try {
  228. 228 System.out.println(fi.getString("utf-8"));
  229. 229 } catch (UnsupportedEncodingException e) {
  230. 230 System.out.println("不支持utf-8编码");
  231. 231 }
  232. 232 ;
  233. 233 }
  234. 234 //普通表单元素处理end
  235. 235 } else {//是文件类型判断其大小,为0继续for循环
  236. 236 if (fi.getSize() == 0) {
  237. 237 continue;
  238. 238 }
  239. 239 String newFileName =FileUtil.renameFile(fi.getName());
  240. 240 try {
  241. 241 fi.write(new File(newFileName));
  242. 242 } catch (Exception e) {
  243. 243 e.printStackTrace();
  244. 244 }
  245. 245
  246. 246 }
  247. 247 }
  248. 248 } catch (FileUploadException e) {
  249. 249 e.printStackTrace();
  250. 250 }
  251. 251
  252. 252 }
  253. 253
  254. 254 }
  255. 255 /***
  256. 256 * 上传文件命名公共方法
  257. 257 * */
  258. 258 public static synchronized String renameFile(String originalFilename){
  259. 259 System.out.println("原文件名:"+originalFilename);
  260. 260 //桌面路径
  261. 261 String prefix = originalFilename.substring(originalFilename.lastIndexOf("."));
  262. 262 String newFileName =new Date().getTime()+ prefix;
  263. 263 String desktopPath= FileSystemView.getFileSystemView().getHomeDirectory().getAbsolutePath()+"\\"+newFileName;
  264. 264 System.out.println("新文件名:"+newFileName);
  265. 265 return desktopPath;
  266. 266
  267. 267 }
  268. 268
  269. 269 // <!-- 多部分文件上传 -->
  270. 270 //<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
  271. 271 // <property name="maxUploadSize" value="104857600" />
  272. 272 // <property name="maxInMemorySize" value="4096" />
  273. 273 // <property name="defaultEncoding" value="UTF-8"></property>
  274. 274 //</bean>
  275. 275 }

SpringMVC IO 文件上传的更多相关文章

  1. springmvc图片文件上传接口

    springmvc图片文件上传 用MultipartFile文件方式传输 Controller package com.controller; import java.awt.image.Buffer ...

  2. SpringMVC学习--文件上传

    简介 文件上传是web开发中常见的需求之一,springMVC将文件上传进行了集成,可以方便快捷的进行开发. springmvc中对多部件类型解析 在 页面form中提交enctype="m ...

  3. springmvc实现文件上传

    springmvc实现文件上传 多数文件上传都是通过表单形式提交给后台服务器的,因此,要实现文件上传功能,就需要提供一个文件上传的表单,而该表单就要满足以下3个条件 (1)form表彰的method属 ...

  4. 关于SpringMVC的文件上传

    关于文件的上传,之前写过2篇文章,基于Struts2框架,下面给出文章链接: <关于Struts2的文件上传>:http://www.cnblogs.com/lichenwei/p/392 ...

  5. SpringMVC+ajax文件上传实例教程

    原文地址:https://blog.csdn.net/weixin_41092717/article/details/81080152 文件上传文件上传是项目开发中最常见的功能.为了能上传文件,必须将 ...

  6. Spring +SpringMVC 实现文件上传功能。。。

    要实现Spring +SpringMVC  实现文件上传功能. 第一步:下载 第二步: 新建一个web项目导入Spring 和SpringMVC的jar包(在MyEclipse里有自动生成spring ...

  7. SpringMVC之文件上传异常处理

    一般情况下,对上传的文件会进行大小的限制.如果超过指定大小时会抛出异常,一般会对异常进行捕获并友好的显示出来.以下用SpringMVC之文件上传进行完善. 首先配置CommonsMultipartRe ...

  8. 【SpringMVC】文件上传Expected MultipartHttpServletRequest: is a MultipartResolver错误解决

    本文转载自:https://blog.csdn.net/lzgs_4/article/details/50465617 使用SpringMVC实现文件上传时,后台使用了 MultipartFile类, ...

  9. 一起学SpringMVC之文件上传

    概述 在Web系统开发过程中,文件上传是普遍的功能,本文主要以一个简单的小例子,讲解SpringMVC中文件上传的使用方法,仅供学习分享使用,如有不足之处,还请指正. 文件上传依赖包 如下所示,文件上 ...

随机推荐

  1. 42 张图带你撸完 MySQL 优化

    Hey guys,这里是程序员cxuan,欢迎你阅读我最新一期的文章,这篇文章是 MySQL 调优的汇总版,我加了一下日常开发过程中的调优经验,希望对各位小伙伴们有所帮助.下面开始正文. 一般传统互联 ...

  2. PAT乙级:1088 三人行 (20分)

    PAT乙级:1088 三人行 (20分) 题干 子曰:"三人行,必有我师焉.择其善者而从之,其不善者而改之." 本题给定甲.乙.丙三个人的能力值关系为:甲的能力值确定是 2 位正整 ...

  3. 极致简洁的微前端框架-京东MicroApp开源了

    前言 MicroApp是一款基于类WebComponent进行渲染的微前端框架,不同于目前流行的开源框架,它从组件化的思维实现微前端,旨在降低上手难度.提升工作效率.它是目前市面上接入微前端成本最低的 ...

  4. js中==和===的区别以及总结

    js中==和===的区别以及总结 学习js时我们会遇到 == 和 === 两种符号,现做总结如下 两种符号的定义 "==" 叫做相等运算符 "===" 叫做严格 ...

  5. 共享内存 & Actor并发模型哪个更快?

    HI,前几天被.NET圈纪检委@懒得勤快问到共享内存和Actor并发模型哪个速度更快. 前文传送门: 说实在,我内心10w头羊驼跑过...... 先说结论 首先两者对于并发的风格模型不一样. 共享内存 ...

  6. JSON数据的HTTP Header应该怎么标记?

    第一种 header('Content-type: application/json'); 另一种 header('Content-type: text/json');

  7. 大数据学习(25)—— 用IDEA搭建Spark开发环境

    IDEA是一个优秀的Java IDE工具,它同样支持其他语言.Spark是用Scala语言编写的,用Scala开发Spark是最舒畅的.当然,Spark也提供Java和Python的API. Java ...

  8. 2021陕西省大学生网络安全技能大赛 Web ez_checkin

    web ez_checkin 进去看了一会,啥也没找到,直接上dirsearch 扫到一个index.php~,打开看一看,是php审计 <?php error_reporting(0); in ...

  9. MFC对文件文件夹转移、删除、重命名、复制【转】

    HFileOperation()函数主要对文件夹有四种操作:复制,删除,移动,重命名. 写了四个函数.可以很好的对文件夹进行操作. //函数名:MoveFolder //参数:lpszFromPath ...

  10. Kerberos相关的安全问题

    用户名枚举 原理 不存在的用户 存在的用户 通过这个比较就可以写脚本改变cname的值进行用户名枚举. 利用 https://github.com/ropnop/kerbrute/ kerbrute. ...