springmvc文件的上传和下载

      Spring MVC为文件上传提供了直接的支持,这种支持是用即插即用的MultipartResolver实现的。Spring MVC使用Apache Commons FileUpload技术实现了一个MultipartResolver实现类:CommonsMultipartResolver。因此,SpringMVC的文件上传还需要依赖Apache Commons FileUpload的组件。

1.前台通过ajax获取到服务器返回的json的文件的信息展示到页面。

springmvc文件的上传和下载_第1张图片

ajax展示文件代码

	

通过页面的id元素来获取控件,然后把取得的数据填充进去。

提交表单时需要选择文件的类型

from表单添加属性

enctype="multipart/form-data"

springmvc.xml配置上传解析器

    
        
        
        
        
        
    

后台上传文件的代码,使用MultipartFile类就可以获取文件的相关信息。

	//上传文件
	@RequestMapping("/uploadfile")
	public ModelAndView uploadfile(
			HttpServletRequest request,
			MultipartFile file//接收文件
			) throws Exception {
		ModelAndView modelAndView = new ModelAndView();
		//原始名称
		String originalFilename = file.getOriginalFilename();
		//上传文件
		if(file!=null && originalFilename!=null && originalFilename.length()>0){
			
			Pan pan=new Pan();
			//存储的物理路径
			String fileurl = pan.getFileuploadurl();
			//文件的全路径
			File newFile = new File(fileurl+originalFilename);
			//将内存中的数据写入磁盘
			file.transferTo(newFile);
			//访问的路径
			String file_url=pan.getFiledownurl()+originalFilename;
			List zhangFileList=zhangFileService.selectAllZhangFile();
			int length=zhangFileList.size();
			//判断数据库里面是否有这个文件
			boolean flag=false;
			for(int i=0;i

下载文件的代码:

    // 下载功能
    @RequestMapping(value = "/download/{fileId}")
    public void download(HttpServletRequest request,
            HttpServletResponse response, @PathVariable("fileId") Integer fileId)
            throws Exception {
        // 前台传来id,根据id从数据库找到对应的文件名字
        ZhangFile zhangfile = zhangFileService.selectByPrimaryKey(fileId);
        String filename = zhangfile.getFileName();
        response.setContentType("text/html;charset=UTF-8");    
        request.setCharacterEncoding("UTF-8");  
        // 读取目标文件,通过response将目标文件写到客户端
        // 获取目标文件的绝对路径
        // 下载文件路径前缀 path="D:/OnlineJudge/tomcat_normal/webapps/StudyFiles/"
        String path = new Pan().getFileuploadurl();
        String fullFileName = path + filename;
        long fileLength = new File(fullFileName).length();    
        // 下载显示的文件名,解决中文名称乱码问题
        if (request.getHeader("User-Agent").toLowerCase().indexOf("firefox") > 0) {
            filename = new String(filename.getBytes("UTF-8"), "ISO8859-1");
        }// firefox浏览器
        else if (request.getHeader("User-Agent").toUpperCase().indexOf("MSIE") > 0) {
            filename = URLEncoder.encode(filename, "UTF-8");
        }// IE浏览器
        response.reset();
        // 设置文件MIME类型
        response.setContentType(request.getServletContext().getMimeType(
                filename));
        // 设置Content-Disposition
        response.setHeader("Content-Disposition", "attachment;filename="
                + filename);
        response.setHeader("Content-Length", String.valueOf(fullFileName));    
        // 读取目标文件,通过response将目标文件写到客户端
        // 读取文件
        BufferedInputStream bis = new BufferedInputStream(new FileInputStream(fullFileName));    
        BufferedOutputStream bos = new BufferedOutputStream(response.getOutputStream());    
        byte[] buff = new byte[2048];    
        int bytesRead;    
        while (-1 != (bytesRead = bis.read(buff, 0, buff.length))) {    
            bos.write(buff, 0, bytesRead);    
        }    
        bis.close();    
        bos.close();    
    }

这样可以下载的文件在火狐和谷歌浏览器可以显示中文名字。

 

springmvc文件的上传和下载_第2张图片
但是IE浏览器就下载下来的名字和格式会乱了,需要自己用打开方式选择来打开,这是一个还没有解决的问题,先记录下来。

 

你可能感兴趣的:(Spring,Ssm)