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中文件上传的使用方法,仅供学习分享使用,如有不足之处,还请指正. 文件上传依赖包 如下所示,文件上 ...
随机推荐
- 微信小程序云开发-云存储-上传单个视频到云存储并显示到页面上
一.wxml文件 <!-- 上传视频到云存储 --> <button bindtap="chooseVideo" type="primary" ...
- How to Install KDE on Ubuntu 16.04
sudo add-apt-repository ppa:kubuntu-ppa/backportssudo apt-get updatesudo apt-get dist-upgradesudo ap ...
- P7473 [NOI Online 2021 入门组] 重力球
P7473 [NOI Online 2021 入门组] 重力球 题意 给你一个正方形平面,某些位置有障碍,对于平面上两个球,每次你可以改变重力方向使两个球下落到最底端,求使两个球位置重合的最小改变重力 ...
- [考试总结]noip模拟9
因为某些原因,咕掉了一段时间 所以现在才更新 T1 斐波那契 一看就是规律 然而我选择了暴力 其实完全可以打表去找规律. 然后就可以发现父亲的顺序也是斐波那契. 就这 #include<bits ...
- HCNA Routing&Switching之OSPF缺省路由发布
前文我们了解了OSPF的度量值,以及基础配置命令的总结,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/15069632.html:今天我们来聊一聊在ospf里动 ...
- iOS实现常用地图坐标系转换(swift5)
// 桥接后,OC工程也可用 // HTMCoorTransform.swift // HTMapKit // // Created by LongMa on 2021/8/3. // import ...
- 大数据学习(20)—— Zookeeper介绍
ZooKeeper是什么 就像相声大师冯巩每次出场都说:"亲爱的观众朋友们,我想死你们啦"一样,我再强调一次,学习大数据官网很重要.Zookeeper官网看这里ZooKeeper ...
- 关于vue3简单状态管理约定引发的思考
官方文档的代码是这样的 export const store = { debug: true, state: reactive({ message: 'Hello!' }), setMessageAc ...
- .NET5控制台程序使用EF连接MYSQL
.NET5控制台程序使用EF连接MYSQL 1.使用nuget下载: Microsoft.Extensions.Configuration.Json Pomelo.EntityFrameworkCor ...
- 看完就会的Spring Cloud Gateway
在前面几节,我给大家介绍了当一个系统拆分成微服务后,会产生的问题与解决方案:服务如何发现与管理(Nacos注册中心实战),服务与服务如何通信(Ribbon, Feign实战) 今天我们就来聊一聊另一个 ...