zoukankan      html  css  js  c++  java
  • SpringMVC实现文件的上传和下载

    一、文件的上传

    大体可分为以下几步:

          1.导入架包;

          2.配置springmvc.xml文件;

          3.写上传文件的页面;

          4.写Controller层下的请求所对应的映射。

         Spring MVC 上下文中默认没有为文件上传提供了直接的支持因此默认情况下不能处理文件的上传工作如果想使用 Spring 的文件上传功能,需现在上下文中配置 CommonsMultipartResovler

        1.导入以下两个架包;

            commons-fileupload-1.3.1.jar
    commons-io-2.4.jar

         2.配置springmvc.xml文件

    <!-- 配置CommonsMultipartResolver -->
    	<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
    		<property name="defaultEncoding" value="utf-8"></property><!-- 默认编码 -->
    		<property name="maxUploadSize" value="102400"></property><!-- 以字节为单位,设置最大上传文件的大小限制 -->
    	</bean>
        3.写上传文件的页面   

    <form action="${pageContext.request.contextPath }/testUpload" method="post" enctype="multipart/form-data">
    		file:<input type="file" name="photo"><br>
    		desc:<input type="text" name="desc">
    		<input type="submit" value="提交">
    	</form>
    注意:表单:POST请求,file类型,enctype="multipart/form-data"
         4.写Controller层下的请求所对应的映射。

    @RequestMapping(value="/testUpload",method=RequestMethod.POST)
    	public String testUpload(HttpServletRequest request,@RequestParam(value="desc") String desc,@RequestParam(value="photo") CommonsMultipartFile file) throws IOException{
    		ServletContext servletContext = request.getServletContext();
    		//得到真实路径
    		String realPath = servletContext.getRealPath("/upload");
    		File file1 = new File(realPath);
    		if(!file1.exists()){  //判断该文件是否存在,不存在将新建一个
    			file1.mkdir();
    		}
    		OutputStream out;
    		InputStream in;
    		//uuid_name.jpg
    		String prefix = UUID.randomUUID().toString();
    		prefix = prefix.replace("-","");//将UUID中的-去掉
    		String fileName = prefix+"_"+file.getOriginalFilename();
    		//防止一个文件多次上传造成的重名的问题;getOriginalFilename获取上传文件的名字
    		System.out.println(fileName);		
    		out = new FileOutputStream(new File(realPath+"\"+fileName));
    		in = file.getInputStream();
    		/*byte[] bt=new byte[1024];  原生态处理方法
    		int a=0;
    		while((a=in.read(bt))!=-1){
    			out.write(bt,0,a);	
    		}*/
    		IOUtils.copy(in, out);
    		out.close();
    		in.close();
    		return "success";
    	}


    二、文件的下载

         用ResponseEntity<byte[]> 返回值完成文件下载:

    @RequestMapping(value="/testdownload")
    	public ResponseEntity<byte[]> testdownload(HttpServletRequest request) throws Exception{
    		ServletContext servletContext = request.getServletContext();
    		String fileName = "风吹麦浪.mp3";
    		//获得源文件的路径,即在服务器上的路径
    		String realPath = servletContext.getRealPath("/WEB-INF/"+fileName);
    		InputStream in =new FileInputStream(new File(realPath));
    		byte[] body = new byte[in.available()];
    		in.read(body);
    		MultiValueMap<String, String> headers=new HttpHeaders();
    		fileName= new String(fileName.getBytes("gbk"), "iso8859-1");
    		headers.set("Content-Disposition","attachment;filename="+fileName);
    		HttpStatus statusCode=HttpStatus.OK;//状态
    		ResponseEntity<byte[]> response = new ResponseEntity<byte[]>(body, headers, statusCode);
    		in.close();
    		return response;		
    	}
    }


  • 相关阅读:
    android 选择图片或拍照时旋转了90度问题
    拍照选择图片(Activity底部弹出)
    Dialog 自定义使用1
    Dialog 基本使用
    秒杀主流应用的二维码扫描
    gen already exists but is not a source folder. Convert to a source folder or rename it.
    gen already exists but is not a source folder. Convert to a source folder or rename it.
    Unable to execute dex: Multiple dex files define
    xxxx is not translated in zh-rCN, zh-rTW
    Android Application 对象介绍
  • 原文地址:https://www.cnblogs.com/mazhitao/p/7429448.html
Copyright © 2011-2022 走看看