SpringMVC 理论与有用技术(二)文件上传
文件上传相信大家都做过,差点儿全部的项目都有上传文件的功能,尤其是BS架构的项目中经常被列为常规功能来开发。不管是在开发.NET 项目还是java项目我们会用到非常多的框架,这个功能也被集成到了框架之中,由于他太经常使用了。框架就是为我们提供了一个开发项目的半成品结构。能够大大提高开发效率节省开发成本、缩短开发周期。
长话短说本文主要介绍一个怎么利用springmvc实现单个以及多个文件上传。附加说说上传文件的原理。
从详细的某个实例開始,先形似再神思
第一种方式设计思路:三个注意地方
1.表单页面
2.xml配置文件
3.uploadController类
在多次实践和开发的过程中会逐渐理解,编程思想和设计思路也相同非常重要。他们是在重复实践中的出来的经验结晶有时比实践还要重要,就像伟大的结果非常多是有伟大的思想開始的。
1.对于文件上传表单要有特殊的属性,例如以下
<form action="/springmvc7/file/upload2" enctype="multipart/form-data" method="post">
选择文件:<input type="file" name="file"/> <input type="submit" value="上传" /> </form>
表单的enctype属性须要进行秀给。
2.xml文件
<!-- 文件上传解析器配置以及大小编码等參数 -->
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<property name="defaultEncoding" value="utf-8" />
<property name="maxUploadSize" value="10485760000" />
<property name="maxInMemorySize" value="40960" />
</bean>
上传文件的解析器类,这里仅仅是配置了与普通的配置不一样的地方,同样的注解等配置能够參考前面几篇博客,这个类负责解析上传文件的各个參数和信息。
3.updaController.java
@Controller
@RequestMapping("/file")
public class UploadController { @RequestMapping("/upload")
public String upload(@RequestParam("file") CommonsMultipartFile file ,HttpServletRequest request) throws IOException
{
System.out.println("filename---->"+file.getOriginalFilename()); if (!file.isEmpty())
{ try { InputStream inputStream= file.getInputStream(); FileOutputStream outputStream = new FileOutputStream("D:/"+new Date().getTime()+file.getOriginalFilename()); int b=0;
while ((b=inputStream.read()) != -1 ) {
outputStream.write(b);
}
outputStream.flush();
outputStream.close();
inputStream.close();
} catch (FileNotFoundException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
return "/success";
}
这种方法是用来接受上传的文件。有个參数CommonsMultipartFile file,是用来接受文件的,它能够自己推断数据类型是否是文件类型,假设是文件类型就会受到再通过输出流输出到server上。
另外一种方式同第一种非常类似,仅仅是从request里面取数据,我们都知道前后台交互的数据都是通过request、response这两个对象交互。上传了文件也会在这里面仅仅要能从里面取出来就好。
uploadController2.java
@RequestMapping("/upload2")
public void upload2(HttpServletRequest request,HttpServletResponse response) throws IllegalStateException, IOException
{
CommonsMultipartResolver multipartResolver=new CommonsMultipartResolver();
if (multipartResolver.isMultipart(request)) {
MultipartHttpServletRequest multipartRequest=(MultipartHttpServletRequest)request;
Iterator<String> iter=multipartRequest.getFileNames();
while(iter.hasNext())
{
MultipartFile file=multipartRequest.getFile((String)iter.next());
if (file!=null) {
String filename="demo"+file.getOriginalFilename();
String path="D:/"+filename;
File localfile=new File(path);
file.transferTo(localfile);
}
}
}
}
springmvc对request进行了封装所以能够转化为request类型,也能够从里面读取数据。框架大部分都是对底层的东西进行封装以便我们用这方便,它用这配置文件比struts2少了非常多。认为配置灵活了简单了,从这一点上看springmvc比struts2灵活了非常多。
SpringMVC 理论与有用技术(二)文件上传的更多相关文章
- JavaEE开发之SpringMVC中的自定义消息转换器与文件上传
上篇博客我们详细的聊了<JavaEE开发之SpringMVC中的静态资源映射及服务器推送技术>,本篇博客依然是JavaEE开发中的内容,我们就来聊一下SpringMVC中的自定义消息转发器 ...
- iOS-网络编程(二)文件上传和断点离线下载
一. iOS中发送HTTP请求的方案 在iOS中,我们常用发送HTTP请求的方案有苹果原生(自带)NSURLConnection:用法简单,最古老最经典最直接的一种方案 (iOS 9.0弃用)NSUR ...
- springMVC3学习(十二)--文件上传优化CommonsMultipartResolver
基于上一篇文件上传发现效率很慢,我们应该对它进行优化 使用springMVC对文件上传的解析器 来处理文件上传的时候需要在spring的applicationContext里面加上springMVC ...
- springMVC两种方式实现多文件上传及效率比较
springMVC实现 多文件上传的方式有两种,一种是我们经常使用的以字节流的方式进行文件上传,另外一种是使用springMVC包装好的解析器进行上传.这两种方式对于实 现多文件上传效率上却有着很大的 ...
- 04springMVC结构,mvc模式,spring-mvc流程,spring-mvc的第一个例子,三种handlerMapping,几种控制器,springmvc基于注解的开发,文件上传,拦截器,s
1. Spring-mvc介绍 1.1市面上流行的框架 Struts2(比较多) Springmvc(比较多而且属于上升的趋势) Struts1(即将被淘汰) 其他 1.2 spring-mv ...
- springMVC+spring+mybatis整合(包括文件上传和下载)
driver=com.mysql.jdbc.Driver url=jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncod ...
- SpringMVC 理论与有用技术(一) 简单、有用、易懂的几个实例
SpringMVC先来看一下百度百科中的定义; Spring MVC属于SpringFrameWork的兴许产品,已经融合在Spring Web Flow里面.Spring 框架提供了构建 Web 应 ...
- SpringMVC(4):文件上传与下载
一,文件上传 文件上传是项目开发中最常见的功能之一 ,springMVC 可以很好的支持文件上传,但是SpringMVC上下文中默认没有装配MultipartResolver,因此默认情况下其不能处理 ...
- SpringMVC 文件上传(Multipart)
作者QQ:1095737364 QQ群:123300273 欢迎加入! 平时用的上传一般是输入流和输出流上传,今天使用的是transferTo方法: Multipart请求是在控制器实例 ...
随机推荐
- hdoj--1258--Sum It Up(dfs)
Sum It Up Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total ...
- 【NOIP 2011】 计算系数
[题目链接] https://www.luogu.org/problemnew/show/P1313 [算法] 二项式定理 [代码] #include<bits/stdc++.h> usi ...
- Java攻城狮之基础练习题------经典例题
(一)键盘录入1----7,分别于控制台输出对应的周一,周二,周三,周四,周五,周六,周天. (二)设置一个数组,求出数组中对应的最大值以及索引. (三)在控制台输出9x9乘法口诀表. (四)使用冒泡 ...
- spy++ 句柄消息详解
使用spy++捕获到的消息详解 主要是今天正好自己用到. 原来也有用过SPY++查看消息,然后自己SendMessage或者PostMessage 直接发送消息给目标程序.但是原来一用就有效果,今天要 ...
- ABP框架应用汇总
相信很多人可能听过或没听过ABP这个框架,在我接触此框架时也是在现在所在的公司开始接触的,我们用此开源框架作为我们项目的架构,我们正好做的是Saas云服务多租户管理系统开发,并且经过了一年多高 ...
- jQuery基本选择器模块
选择器模块 1.获取元素的基本操作 案例:给页面中的div和p设置边框样式 1.1 传统方式 -获取元素并设置样式 实现思路 1 通过 标签名 获取元素 2 遍历循环 设置样式 var dvs = d ...
- 集成Bmob推送
Write By lz: 转发请注明原文地址: http://www.cnblogs.com/lizhilin2016/p/6952217.html Lz 寄语: Bmob 奇葩推送, 大坑, 想要 ...
- 揭秘IPHONE X刷脸认证的技术奥秘
苹果最新发布的Iphone X具有一个全新的功能叫做刷脸认证,背后的技术其实是生物密码的更新,通过人脸识别取代了传统的指纹识别,大家肯定对这种新技术非常感兴趣,下面我们通过这篇文章为大家介绍人脸识别的 ...
- MySQL 5.6 Reference Manual-14.5 InnoDB Tablespace Management
14.5 InnoDB Tablespace Management 14.5.1 Resizing the InnoDB System Tablespace 14.5.2 Changing the ...
- PHP中的字符串类型
PHP支持两种类型的字符串,这些字符串用引号说明. 1.如果希望赋值一个字面意义的字符串,精确保存这个字符串的内容,应该用单引号标注,例如: $info='You are my $sunshine'; ...