文件上传相信大家都做过,差点儿全部的项目都有上传文件的功能,尤其是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 理论与有用技术(二)文件上传的更多相关文章

  1. JavaEE开发之SpringMVC中的自定义消息转换器与文件上传

    上篇博客我们详细的聊了<JavaEE开发之SpringMVC中的静态资源映射及服务器推送技术>,本篇博客依然是JavaEE开发中的内容,我们就来聊一下SpringMVC中的自定义消息转发器 ...

  2. iOS-网络编程(二)文件上传和断点离线下载

    一. iOS中发送HTTP请求的方案 在iOS中,我们常用发送HTTP请求的方案有苹果原生(自带)NSURLConnection:用法简单,最古老最经典最直接的一种方案 (iOS 9.0弃用)NSUR ...

  3. springMVC3学习(十二)--文件上传优化CommonsMultipartResolver

    基于上一篇文件上传发现效率很慢,我们应该对它进行优化  使用springMVC对文件上传的解析器 来处理文件上传的时候需要在spring的applicationContext里面加上springMVC ...

  4. springMVC两种方式实现多文件上传及效率比较

    springMVC实现 多文件上传的方式有两种,一种是我们经常使用的以字节流的方式进行文件上传,另外一种是使用springMVC包装好的解析器进行上传.这两种方式对于实 现多文件上传效率上却有着很大的 ...

  5. 04springMVC结构,mvc模式,spring-mvc流程,spring-mvc的第一个例子,三种handlerMapping,几种控制器,springmvc基于注解的开发,文件上传,拦截器,s

     1. Spring-mvc介绍 1.1市面上流行的框架 Struts2(比较多) Springmvc(比较多而且属于上升的趋势) Struts1(即将被淘汰) 其他 1.2  spring-mv ...

  6. springMVC+spring+mybatis整合(包括文件上传和下载)

    driver=com.mysql.jdbc.Driver url=jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncod ...

  7. SpringMVC 理论与有用技术(一) 简单、有用、易懂的几个实例

    SpringMVC先来看一下百度百科中的定义; Spring MVC属于SpringFrameWork的兴许产品,已经融合在Spring Web Flow里面.Spring 框架提供了构建 Web 应 ...

  8. SpringMVC(4):文件上传与下载

    一,文件上传 文件上传是项目开发中最常见的功能之一 ,springMVC 可以很好的支持文件上传,但是SpringMVC上下文中默认没有装配MultipartResolver,因此默认情况下其不能处理 ...

  9. SpringMVC 文件上传(Multipart)

    作者QQ:1095737364    QQ群:123300273     欢迎加入! 平时用的上传一般是输入流和输出流上传,今天使用的是transferTo方法: Multipart请求是在控制器实例 ...

随机推荐

  1. Bone Collector(hdoj--2602--01背包)

    Bone Collector Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) T ...

  2. Node.js:Web 模块

    ylbtech-Node.js:Web 模块 1.返回顶部 1. Node.js Web 模块 什么是 Web 服务器? Web服务器一般指网站服务器,是指驻留于因特网上某种类型计算机的程序,Web服 ...

  3. 2.2Shiro架构

  4. Web进行压力测试的小工具

    在Linux下对Web进行压力测试的小工具有很多,比较出名的有AB.虽然AB可以运行在windows下,但对于想简单界面操作的朋友有点不太习惯.其实vs.net也提供压力测试功能但显然显得太重了,在测 ...

  5. Vue常用插件总结

    Vue-router ----- 路由插件 Vue-loader-----webpack的加载器,允许您以称为单文件组件(SFC)的格式创作Vue组件   Vue-resource-----提供了使用 ...

  6. POJ 1386 判断欧拉回路

    题意:要开启一扇门,n个单词是密码,n个单词中,如果一个单词的首字母和前一个单词的尾字母相同,并且每个单词都能这么连起来且只用一次,则门可以开启,否则不能开启,现给出单词,判断门是否可以开. 有向图欧 ...

  7. lua中.和:的区别

    local myTable = {} function myTable:putMyname(val) print(val) print(self and self.name) end myTable. ...

  8. Git Learning Part I - Install Git and configure it

    Why we need 'Git' GIt version control: 1. record the history about updating code and deleting code 2 ...

  9. spring过滤器篇

    CharacterEncodingFilter spring的web包下的一个过滤器,用于设置程序的字符编码,它有两个参数encoding和forceEncoding. encoding:字符集,将过 ...

  10. (转)Bootstrap 之 Metronic 模板的学习之路 - (6)自定义和扩展

    https://segmentfault.com/a/1190000006815041 前面我们将 Metronic 的结构和源码大致浏览了一遍,Metronic 整个文件包有三百多兆,在实际项目中, ...