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