SpringMVC(4) 文件上传和下载

点击下载项目资源        密码:1k9z


前端页面:
上传文件注意事项:①post提交数据
                                ②form表单 --> enctype属性为:multipart/form-data
                                ③使用上传文件的file标签



    
        
        Insert title here
    
    
        

文件上传

用户名:
文件上传:

文件下载

下载 下载2

上传文件功能类:

/**
 * 上传文件:
 * 使用MultipartFile类型接收前台上传的文件数据
 * 接收数据时要指定接收方式-->RequestMethod.POST
 * @author 郑清
 */
@Controller
public class UploadController {
	
	@RequestMapping(value="/upload",method=RequestMethod.POST)
	@ResponseBody //不写会默认返回当前路径!!
	public void upload(String username,MultipartFile image,HttpServletRequest req) throws Exception, IOException{
		System.out.println("username数据:"+username);
		//接收文件数据
		System.out.println(image.getContentType());//  image/jpeg   获取上传文件的类型
		System.out.println(image.getName());//image  获取file标签的name属性  
		System.out.println(image.getOriginalFilename());//1.jpg   获取上传文件的名称
		
		//获取到上传的文件数据
		String contentType = image.getContentType();
		//判断上传文件是否为图片
		if (contentType==null||!contentType.startsWith("image/")) {
			System.out.println("===不属于图片类型...===");
			return;
		}
		
		//动态获取上传文件夹的路径
		ServletContext context = req.getServletContext();
		String realPath = context.getRealPath("/upload");//获取本地存储位置的绝对路径
		
		String filename = image.getOriginalFilename();//获取上传时的文件名称
		filename = UUID.randomUUID().toString()+"."+FilenameUtils.getExtension(filename);//创建一个新的文件名称    getExtension(name):获取文件后缀名
		
		File f= new File(realPath, filename);
		image.transferTo(f);//将上传的文件存储到指定位置
	}

}

注意:需要在springmvc的配置文件中配置上传文件的解释器 


	
		10000000000 
	
	
		UTF-8
	

下载功能类:

/**
 * 文件下载:
 * @author 郑清
 */
@Controller
public class DownLoadController {	
	/*
	 * 下载方式一:
	 * ①获取前台要下载的文件名称
	 * ②设置响应类型
	 * ③设置下载页显示的文件名
	 * ④获取下载文件夹的绝对路径和文件名合并为File类型
	 * ⑤将文件复制到浏览器
	 */
	@RequestMapping("/download")
	@ResponseBody
	public void download(HttpServletRequest req, HttpServletResponse resp, String filename) throws Exception {
		String realPath = req.getServletContext().getRealPath("/download");//获取下载文件的路径
		File file = new File(realPath, filename);//把下载文件构成一个文件处理   filename:前台传过来的文件名称

		//设置响应类型  ==》 告诉浏览器当前是下载操作,我要下载东西
		resp.setContentType("application/x-msdownload");
		//设置下载时文件的显示类型(即文件名称-后缀)   ex:txt为文本类型
		resp.setHeader("Content-Disposition", "attachment;filename=" + filename);

		//下载文件:将一个路径下的文件数据转到一个输出流中,也就是把服务器文件通过流写(复制)到浏览器端
		Files.copy(file.toPath(), resp.getOutputStream());//Files.copy(要下载的文件的路径,响应的输出流)
	}

	/*
	 * 下载方式二:Spring框架技术
	 */
	@RequestMapping(value = "/download2", method = RequestMethod.GET)
	public ResponseEntity download(HttpServletRequest request,String filename) throws IOException {
		String realPath = request.getServletContext().getRealPath("/download");//获取下载文件的路径
		File file = new File(realPath, filename);//把下载文件构成一个文件处理   filename:前台传过来的文件名称

		HttpHeaders headers = new HttpHeaders();//设置头信息
		String downloadFileName = new String(filename.getBytes("UTF-8"), "iso-8859-1");//设置响应的文件名

		headers.setContentDispositionFormData("attachment", downloadFileName);
		headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);

		// MediaType:互联网媒介类型 contentType:具体请求中的媒体类型信息
		return new ResponseEntity(FileUtils.readFileToByteArray(file), headers, HttpStatus.CREATED);
	}

}

项目结构图:

SpringMVC(4) 文件上传和下载_第1张图片

运行:

SpringMVC(4) 文件上传和下载_第2张图片

你可能感兴趣的:(-----,-----②,SpringMVC)