文件上传完毕返回页面用Model对象带回filename,在webapps的该应用目录下,已经存在上传文件。
页面
1<%@pagelanguage="java"contentType="text/html;charset=UTF-8" 2pageEncoding="UTF-8"%> 3<!DOCTYPEhtml> 4<html> 5<head> 6<metacharset="UTF-8"> 7<title>Inserttitlehere</title> 8</head> 9<body> 10<h2>用户注册</h2> 11<formaction="register"enctype="multipart/form-data"method="post"> 12<table> 13<tr> 14<td>用户名:</td> 15<td><inputtype="text"name="username"></td> 16</tr> 17<tr> 18<td>请上传头像:</td> 19<td><inputtype="file"name="image"></td> 20</tr> 21<tr> 22<td><inputtype="submit"value="注册"></td> 23</tr> 24</table> 25</form> 26 27<scripttype="text/javascript"> 28functiontest(){ 29varfilename=document.getElementById("filename"); 30alert(encodeURIComponent(filename)); 31} 32</script> 33 34<h3>文件下载</h3> 35<ahref="javascript:window.location.href=download?filename=+ 36encodeURIComponent(${requestScope.filename})"> 37${requestScope.filename} 38</a> 39</body> 40</html>文件上传与下载
SpringMVC提供了一个ResponseEntity类型,使用它可以很方便定义返回的BodyBuilder、HttpHeaders、HttpStatus。
2publicStringregister(HttpServletRequestrequest,@ModelAttributeUseruser,Modelmodel)throwsIllegalStateException,IOException{ 3System.out.println(user.getUsername()); 4//如果上传文件部位空,写入上传文件路径 5if(!user.getImage().isEmpty()){ 6//上传路径 7Stringpath=request.getServletContext().getRealPath("/images"); 8//上传文件名 9Stringfilename=user.getImage().getOriginalFilename(); 10Filefilepath=newFile(path,filename); 11//判断路径是否存在,不存在就创建一个 12if(!filepath.getParentFile().exists()){ 13filepath.getParentFile().mkdirs(); 14} 15//将上传文件保存到一个目标文件中 16user.getImage().transferTo(newFile(path+File.separator+filename)); 17//将文件名保存到model中 18model.addAttribute("filename",filename); 19System.out.println("文件上传路径:"+(path+File.separator+filename)); 20return"userInfo"; 21}else{ 22return"error"; 23} 24} 25 26@RequestMapping(value="/download") 27publicResponseEntity<byte[]>download(HttpServletRequestrequest,@RequestParam("filename")Stringfilename, 28@RequestHeader("User-Agent")StringuserAgent)throwsIOException{ 29//下载文件的路径 30Stringpath=request.getServletContext().getRealPath("/images"); 31//构建File 32Filefile=newFile(path+File.separator+filename); 33//ok表示http请求中状态码200 34BodyBuilderbuilder=ResponseEntity.ok(); 35//内容长度 36builder.contentLength(file.length()); 37//application/octet-stream二进制数据流(最常见的文件下载) 38builder.contentType(MediaType.APPLICATION_OCTET_STREAM); 39//使用URLEncoding.decode对文件名进行解码 40filename=URLEncoder.encode(filename,"UTF-8"); 41//根据浏览器类型,决定处理方式 42if(userAgent.indexOf("MSIE")>0){ 43builder.header("Content-Disposition","attachment;filename="+filename); 44}else{ 45builder.header("Content-Disposition","attacher;filename*=UTF-8"+filename); 46} 47returnbuilder.body(FileUtils.readFileToByteArray(file)); 48}FileUtils类是ApacheCommonsFileUpload组件,用于读取文件,并将其构建为ResponseEntity对象。
本文内容总结:
原文链接:https://www.cnblogs.com/alphajuns/p/11067912.html