文件上传相信大家都做过,差点儿全部的项目都有上传文件的功能,尤其是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. Dijkstra算法原理及证明(转)

    Dijkstra算法及其证明 算法: 设G是带权图,图中的顶点多于一个,且所有的权都为正数.本算法确定从顶点S到G中其他各个顶点的距离和最短通路.在本算法中P表示带永久标记的顶点的集合.顶点A的前驱是 ...

  2. [转载]H3C&nbsp;S3600&nbsp;DHCP-SERVER&nbsp;配置【原创】

    原文地址:H3C S3600 DHCP-SERVER 配置[原创]作者:旅行者萧 案例要求: 在H3C S3600-28TP-SI 的vlan 里配置DHCP server,使用vlan 里部分网段为 ...

  3. JDK8新特性:函数式接口

    一,定义 函数式接口,英文为Functional Interface.首先它是一个接口,那么它与其它接口有什么不同呢?不同点就是在这个接口中只允许有一个抽象方法. 这里的只允许一个抽象方法不包括以下几 ...

  4. sublime的常用插件

    作为一个开发者你不可能没听说过SublimeText.不过你没听说过也没关系,下面让你明白. SublimeText是一款非常精巧的文本编辑器,适合编写代码.做笔记.写文章.它用户界面十分整洁,功能非 ...

  5. Spark Streaming概念学习系列之Spark Streaming容错

    Spark Streaming容错 检查点机制-checkpoint 什么是检查点机制? Spark Streaming 周期性地把应用数据存储到诸如HDFS 或Amazon S3 这样的可靠存储系统 ...

  6. WEBGL学习笔记(七):实践练手1-飞行类小游戏之游戏控制

    接上一节,游戏控制首先要解决的就是碰撞检测了 这里用到了学习笔记(三)射线检测的内容了 以鸟为射线原点,向前.上.下分别发射3个射线,射线的长度较短大概为10~30. 根据上一节场景的建设,我把y轴设 ...

  7. C# WinForm的练习

    今天写了一个WinForm的练习,将源代码贴出来和大家一起学习学习. 首先:按照下图将一个button控件.三个RadioButton控件.三个CheckBox控件.一个Label控件和一个Track ...

  8. Linux目录结构(二)

    Linux文件系统结的结构是树形结构,其入口从/开始,了解Linux文件系统的结构,对于我们需要掌握的基础知识点之一. 2.文件系统的组织结构简说: 当您使用Linux的时候,如果您通过ls -la ...

  9. Spark Streaming 整合 Kafka

    一:通过设置检查点,实现单词计数的累加功能 object StatefulKafkaWCnt { /** * 第一个参数:聚合的key,就是单词 * 第二个参数:当前批次产生批次该单词在每一个分区出现 ...

  10. C#中跨线程访问控件

    net 原则上禁止跨线程访问控件,因为这样可能造成错误的发生,推荐的解决方法是采用代理,用代理方法来间接操作不是同一线程创建的控件. 第二种方法是禁止编译器对跨线程访问作检查,可以实现访问,但是出不出 ...