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中文件上传的使用方法,仅供学习分享使用,如有不足之处,还请指正. 文件上传依赖包 如下所示,文件上 ...
随机推荐
- HCNA Routing&Switching之OSPF度量值和基础配置命令总结
前文我们了解了OSPF的网络类型,OSPF中的DR和BDR的选举规则.作用等相关话题,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/15054938.html: ...
- ML-支持向量机(SVM)
简介 支持向量机是一种二分类模型,寻找一个超平面来对样本进行分割,分割的原则是保证间隔最大化. 如果一个线性函数能够将样本分开,称这些数据样本是线性可分的. 在二维空间线性函数就是一条直线,在三维空间 ...
- 单点登录详解(token简述)(七)
前言 为什么整理单点登录? 主要的原因还是自己以前学习的时候曾经用过,但是时间太久,忘记了里面用到了哪些技术.及如何实现的,每次想到单点登录总是感觉即会又不会,这次整理session时,又涉及到了单点 ...
- Matplotlib不能显示中文和正负号的问题
参考链接:https://www.jianshu.com/p/240ea3ae0dc9 在使用matplotlib画饼状图时,遇到了如下问题 UserWarning: findfont: Font f ...
- 用 5W1H 告诉你如何规划合理的测试策略
摘要:测试策略描述了测试工程的总体方法和目标.描述目前在进行哪一阶段的测试以及每个阶段内在进行的测试种类(功能测试.性能测试.覆盖测试等)以及测试人力安排等. 本文分享自华为云社区<浅谈敏捷 ...
- noip模拟32[好数学啊]
noip模拟32 solutions 真是无语子,又没上100,无奈死了 虽然我每次都觉得题很难,但是还是有好多上100的 战神都200多了,好生气啊啊啊 从题开始变难之后,我的时间分配越来越不均匀, ...
- 【UGUI源码分析】Unity遮罩之Mask详细解读
遮罩,顾名思义是一种可以掩盖其它元素的控件.常用于修改其它元素的外观,或限制元素的形状.比如ScrollView或者圆头像效果都有用到遮罩功能.本系列文章希望通过阅读UGUI源码的方式,来探究遮罩的实 ...
- 易语言效率与C++究竟差多少(质数和计算)
文本首发bIlibili,cnblogs为作者补发,如在其他平台看见本文,均为经允许的盗窃 易语言作为款主打 中文 易用 编程的开发软件.但是很多人都在批评易语言的效率. 我们今天通过 质数和计算 来 ...
- Linux 鸟叔的私房菜--完全结束
2018年10月22日 我不想再拖下去了,一本书看不完就无法进行下一本书的阅读,可能算是我的一个强迫症(借口吧) 之前看05年第一版<鸟叔的Linux私房菜>停在脚本语言那里,迟迟没有前进 ...
- MongoDB-02-复制集
复制集(ReplicationSet) 基本原理 基本构成是1主2从的结构,自带互相监控投票机制(Raft(MongoDB) Paxos(mysql MGR 用的是变种)) 如果发生主库宕机,复制集内 ...