zoukankan      html  css  js  c++  java
  • 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灵活了非常多。




  • 相关阅读:
    转载别人(ZZ)创建要素集
    CAD转化为Shp
    VBS学习
    3度带/6度带
    头文件学习,GEOTIFF
    arcmap vba 生成3维侧棱 以及 createfeature与createfeaturebuffer的区别
    另类
    幸福人生讲座(七):怎样引导孩子立志
    幸福人生讲座(四):孝道与仁爱是根本
    幸福人生讲座(二):人生怎样才能幸福?
  • 原文地址:https://www.cnblogs.com/gavanwanggw/p/7091457.html
Copyright © 2011-2022 走看看