文件上传相信大家都做过,差点儿全部的项目都有上传文件的功能,尤其是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灵活了非常多。

最新文章

  1. iOS 语录
  2. linux工具之putty
  3. hdu - 1240 Nightmare &amp;&amp; hdu - 1253 胜利大逃亡(bfs)
  4. 总结:常用的Linux系统监控命令
  5. JS 没有块级作用域
  6. boke
  7. 《Django By Example》第十一章 中文 翻译 (个人学习,渣翻)
  8. 【2016美团】浏览器和服务器在基于https进行请求链接到数据传输过程中,用到了如下哪些技术
  9. memcached讲解
  10. echarts笔记
  11. 简单工厂模式demo
  12. Netflix正式开源其API网关Zuul 2
  13. Linux文件属性有哪些?(共十位)
  14. cmder 常用配置(包括默认管理员运行和解决中文乱码)
  15. 基于jQuery商城网站全屏图片切换代码
  16. Discrete Log Algorithms :Baby-step giant-step 【二】
  17. 嵌入式LINUX设置时间
  18. connot connect to mysql 10061
  19. 2018秋季c语言基础课第一次作业
  20. 创建和修改 ExpressRoute 线路

热门文章

  1. ServletContextAware、ServletRequestAware、ServletResponseAware、SessionAware
  2. [ASPX] 模版引擎XTemplate与代码生成器XCoder(源码)
  3. Hdu-5992 2016ACM/ICPC亚洲区青岛站 K.Finding Hotels KDtree
  4. 用fiddler不能抓取https及证书无法导出
  5. js作业
  6. UI常用网站
  7. 文件操作:Directory,File,FielStream、StreamRead和StreamWriter的使用
  8. Redux入门
  9. lz的第一个RN项目
  10. sqoop从DB2迁移数据到HDFS