SpringMVC实现文件上传与下载

x33g5p2x  于2021-10-07 转载在 Spring  
字(3.4k)|赞(0)|评价(0)|浏览(321)

前言

一、文件上传

SpringMVC已经帮我们写好了文件上传的处理类,我们只需跟着步骤该一下路径写即可
	1. 导入依赖
		<dependency>
		<groupId>commons-fileupload</groupId>
		<artifactId>commons-fileupload</artifactId>
		<version>1.3.1</version>
		</dependency>
	2. 在SpringMVC配置文件中装配文件上传的处理类
		<!--SpringMVC已经帮我们写好了文件上传,我们直接使用即可,默认是不开启的-->
    	<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
	    	<!--        默认是byte字节大小计算,1M=1024KB 1KB=1024byte-->
	        <property name="maxUploadSize" value="5242880"/>
	        <property name="defaultEncoding" value="utf-8"/>
    	</bean>
	3.  前台页面
		<h1>文件上传</h1>
		<form action="/file/upload" method="post" enctype="multipart/form-data">
		    选择文件:<input type="file" name="file"><br>
		    <button type="submit">上传</button>
		</form>
	4. 控制器处理流程
		@Controller
		@RequestMapping("/file")
		public class FileController {
		    @RequestMapping("/upload")
		    public String fileUpload(MultipartFile file, HttpServletRequest request){
		        //获取真实上传文件名称
		        String realFileName=file.getOriginalFilename();
		        //上传的文件多,防止重名被覆盖文件
		        String fileName= UUID.randomUUID().toString().replace("-","")+realFileName.substring(realFileName.lastIndexOf("."));
		        //文件保存路径
		        String savePath = request.getServletContext().getRealPath("/upload")+"/";
		        try {
		            //上传
		            file.transferTo(new File(savePath+fileName));
		            System.out.println("上传成功到===>"+savePath);
		        } catch (IOException e) {
		            e.printStackTrace();
		        }
		        return "success";
		    }
		}
	5. 指定上传文件类型
		public class FileTypeInterceptor implements HandlerInterceptor {
	    @Override
	    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
	        boolean flag=true;
	        if(request instanceof MultipartHttpServletRequest){
	            MultipartHttpServletRequest multipartHttpServletRequest=(MultipartHttpServletRequest)request;
	            Map<String, MultipartFile> fileMap = multipartHttpServletRequest.getFileMap();
	            Iterator<String> iterator = fileMap.keySet().iterator();
	            while (iterator.hasNext()){
	                String key=iterator.next();
	                System.out.println("key===>"+key);
	                MultipartFile file = multipartHttpServletRequest.getFile(key);
	                String originalFilename = file.getOriginalFilename();
	                String type = originalFilename.substring(originalFilename.lastIndexOf("."));
	                System.out.println("上传的文件类型===>"+type);
	                if(!type.toLowerCase().equals(".jpg") && !type.toLowerCase().equals(".png")){
	                    request.getRequestDispatcher("/fileType.jsp").forward(request,response);
	                    flag=false;
	                }
	            }
	        }
	        return flag;
	    }
	}

二、文件下载

1. 控制器
		@RequestMapping("/download")
	    public ResponseEntity<byte[]> download(HttpServletRequest request) throws IOException {
	        //指定下载文件路径
	        String path=request.getServletContext().getRealPath("/upload")+"/c4faeb4210004decbde44dc5bfef80f3.png";
	        //创建响应的 头信息 对象
	        HttpHeaders httpHeaders = new HttpHeaders();
	        //标记以流的方式响应
	        httpHeaders.setContentType(MediaType.APPLICATION_OCTET_STREAM);
	        //以附件的形式响应给用户
	        httpHeaders.setContentDispositionFormData("attachment", URLEncoder.encode("c4faeb4210004decbde44dc5bfef80f3.png","utf-8"));
	        File file=new File(path);
	        ResponseEntity<byte[]> responseEntity=new ResponseEntity<>(FileUtils.readFileToByteArray(file),httpHeaders,HttpStatus.CREATED);
	        return responseEntity;
	    }

相关文章

微信公众号

最新文章

更多