用springMVC实现文件下载

    首先实现文件上传,选择的文件上传后就可以把这个文件下载下来

1.创建一个HTML页面

<body>

   <form action="/springmvc/file/upload.do" method="POST" enctype="multipart/form-data">
       选择文件
       <input type="file" name="file"/>
       
       <input type="submit" value="上传" />
   </form>

</body>

2.写上传跳转后端代码

@RequestMapping(value="upload")
	// @RequestParam MultipartFile file  说明是获取前端传递过来的文件
	public String upload(@RequestParam MultipartFile file,HttpServletRequest request) {
		
		System.out.println("upload 进来的:" + file);
		// 拿到文件 ===> 保存到服务器目录
		
		String fileName = file.getOriginalFilename();

		System.out.println("fileName: " + fileName);
		
		// 1. 服务器的根目录
		//              当前线程                                    类加载的位置                       找根路径的资源     转换为地址
		//String path = Thread.currentThread().getContextClassLoader().getResource(".").getPath();
		
		//网站根目录
		String path=request.getServletContext().getRealPath("/");
		System.out.println("path:"+path);
		//String webpath=this.getClass().getClassLoader().getResource("/").getPath();
		// 2. 创建新文件
		//      新文件路径         . File.separator 获取系统的分隔符
		//              /   linux
		//              \   windows
		//String newFilePath = path + File.separator + fileName;
		String newFilePath=path+File.separator;
		newFilePath+=("upload"+File.separator);
		newFilePath+=fileName;
		//自己的文件夹路径
		
		//   创建的新的文件
		File newFile = new File(newFilePath);
		//判断文件夹路径是否存在
		File parent=newFile.getParentFile();
		if(!parent.exists()){//如果父文件夹不存在
			parent.mkdirs();//那么久创建文件夹
		}
		
		// 将文件转换到新文件中
		try {
			file.transferTo(newFile);
		} catch (Exception e) {
			e.printStackTrace();
		}
		
		System.out.println(path);
		//System.out.println(webpath);
		HttpSession session=request.getSession();
		
		session.setAttribute("img", fileName);
		
		return "upload-success.html";
	}

3.创建上传成功的HTML页面

<body>

        上传成功!
   <a href="/springmvc/file/download.do">下载</a>
</body>
</html>

<script src="/springmvc/js/jquery.min.js"></script>
<script>
$.ajax({
   url:"/springmvc/file/getImgName.do",
   dataType:"json",
   success: function(data){
      var filePath="/springmvc/upload/"+data.img;
      //利用jquery生成一张图片
      var  oImg=$('<img src="'+filePath+'"/>')
      //添加到body元素
      $("body").append(oImg);
      
   }
   
})
</script>

4.写点击下载跳转后端

@RequestMapping(value="download")
	public String download(HttpSession session,HttpServletRequest request,HttpServletResponse response){
		//1.找到文件
		String fileName=(String)session.getAttribute("img");
		
		
		response.setCharacterEncoding("utf-8");
		response.setContentType("multipart/form-data");
		
		//告诉浏览器,当前传输的内容是一个附件文件
		response.setHeader("Content-Disposition","attachment;fileName="
				         +fileName);
		//获取到上传文件的路径
		String path=request.getServletContext().getRealPath("upload");
		String filePath=path+File.separator+fileName;
		
		try {
			FileInputStream is=new FileInputStream(filePath);
			//获取输出的对象
			ServletOutputStream os=response.getOutputStream();
			//创建数组值
			byte[] b=new byte[1024];
			
			int len=0;
			
			while((len=is.read(b))>0){
				os.write(b);
			}
			//关闭http输出流
			os.close();
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return "/file/upload-success.html";
		
	}

5.写ajax要进入的后端代码

	@ResponseBody   //返回结果是一个json数据
	@RequestMapping("getImgName")
	public Map<String,Object> getImgName(HttpSession session){
		
		String img=(String)session.getAttribute("img");
		
		Map<String,Object> map=new HashMap<String,Object>();
		
		map.put("img", img);
		
		return map;
	}
  其中后端代码都是写在一个类中,类上面要加俩个注解@Controller和@RequestMapping(value="/file/")。还有spring配置文件,文件名是springmvc.xml.


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值