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 }
SpringMVC IO 文件上传的更多相关文章
- springmvc图片文件上传接口
springmvc图片文件上传 用MultipartFile文件方式传输 Controller package com.controller; import java.awt.image.Buffer ...
- SpringMVC学习--文件上传
简介 文件上传是web开发中常见的需求之一,springMVC将文件上传进行了集成,可以方便快捷的进行开发. springmvc中对多部件类型解析 在 页面form中提交enctype="m ...
- springmvc实现文件上传
springmvc实现文件上传 多数文件上传都是通过表单形式提交给后台服务器的,因此,要实现文件上传功能,就需要提供一个文件上传的表单,而该表单就要满足以下3个条件 (1)form表彰的method属 ...
- 关于SpringMVC的文件上传
关于文件的上传,之前写过2篇文章,基于Struts2框架,下面给出文章链接: <关于Struts2的文件上传>:http://www.cnblogs.com/lichenwei/p/392 ...
- SpringMVC+ajax文件上传实例教程
原文地址:https://blog.csdn.net/weixin_41092717/article/details/81080152 文件上传文件上传是项目开发中最常见的功能.为了能上传文件,必须将 ...
- Spring +SpringMVC 实现文件上传功能。。。
要实现Spring +SpringMVC 实现文件上传功能. 第一步:下载 第二步: 新建一个web项目导入Spring 和SpringMVC的jar包(在MyEclipse里有自动生成spring ...
- SpringMVC之文件上传异常处理
一般情况下,对上传的文件会进行大小的限制.如果超过指定大小时会抛出异常,一般会对异常进行捕获并友好的显示出来.以下用SpringMVC之文件上传进行完善. 首先配置CommonsMultipartRe ...
- 【SpringMVC】文件上传Expected MultipartHttpServletRequest: is a MultipartResolver错误解决
本文转载自:https://blog.csdn.net/lzgs_4/article/details/50465617 使用SpringMVC实现文件上传时,后台使用了 MultipartFile类, ...
- 一起学SpringMVC之文件上传
概述 在Web系统开发过程中,文件上传是普遍的功能,本文主要以一个简单的小例子,讲解SpringMVC中文件上传的使用方法,仅供学习分享使用,如有不足之处,还请指正. 文件上传依赖包 如下所示,文件上 ...
随机推荐
- 42 张图带你撸完 MySQL 优化
Hey guys,这里是程序员cxuan,欢迎你阅读我最新一期的文章,这篇文章是 MySQL 调优的汇总版,我加了一下日常开发过程中的调优经验,希望对各位小伙伴们有所帮助.下面开始正文. 一般传统互联 ...
- PAT乙级:1088 三人行 (20分)
PAT乙级:1088 三人行 (20分) 题干 子曰:"三人行,必有我师焉.择其善者而从之,其不善者而改之." 本题给定甲.乙.丙三个人的能力值关系为:甲的能力值确定是 2 位正整 ...
- 极致简洁的微前端框架-京东MicroApp开源了
前言 MicroApp是一款基于类WebComponent进行渲染的微前端框架,不同于目前流行的开源框架,它从组件化的思维实现微前端,旨在降低上手难度.提升工作效率.它是目前市面上接入微前端成本最低的 ...
- js中==和===的区别以及总结
js中==和===的区别以及总结 学习js时我们会遇到 == 和 === 两种符号,现做总结如下 两种符号的定义 "==" 叫做相等运算符 "===" 叫做严格 ...
- 共享内存 & Actor并发模型哪个更快?
HI,前几天被.NET圈纪检委@懒得勤快问到共享内存和Actor并发模型哪个速度更快. 前文传送门: 说实在,我内心10w头羊驼跑过...... 先说结论 首先两者对于并发的风格模型不一样. 共享内存 ...
- JSON数据的HTTP Header应该怎么标记?
第一种 header('Content-type: application/json'); 另一种 header('Content-type: text/json');
- 大数据学习(25)—— 用IDEA搭建Spark开发环境
IDEA是一个优秀的Java IDE工具,它同样支持其他语言.Spark是用Scala语言编写的,用Scala开发Spark是最舒畅的.当然,Spark也提供Java和Python的API. Java ...
- 2021陕西省大学生网络安全技能大赛 Web ez_checkin
web ez_checkin 进去看了一会,啥也没找到,直接上dirsearch 扫到一个index.php~,打开看一看,是php审计 <?php error_reporting(0); in ...
- MFC对文件文件夹转移、删除、重命名、复制【转】
HFileOperation()函数主要对文件夹有四种操作:复制,删除,移动,重命名. 写了四个函数.可以很好的对文件夹进行操作. //函数名:MoveFolder //参数:lpszFromPath ...
- Kerberos相关的安全问题
用户名枚举 原理 不存在的用户 存在的用户 通过这个比较就可以写脚本改变cname的值进行用户名枚举. 利用 https://github.com/ropnop/kerbrute/ kerbrute. ...