zoukankan      html  css  js  c++  java
  • SpringMVC实现文件下载时,请求路径中的扩展名被省略

    问题描述

      问题是这样的,我写了一个DownloadController,用来处理下载请求,预期效果如下:

      客户端浏览器在访问URL -->   http://localhost:8080/ssm/download/demo.txt,就会下载demo.txt文件。

      代码如下:

    @Controller
    public class DownloadController {
    
    	@RequestMapping("/download/{fileName}")
    	public String download(@PathVariable String fileName, HttpServletRequest req, HttpServletResponse resp) {
    
    		String downloadDir = "/var/work/download";
    		File targetFile = new File(downloadDir, fileName);
    
    		if (! targetFile.exists()) {
    			req.setAttribute("msg", "文件不存在,路径:" + targetFile.getAbsolutePath());
    			return "error";
    		}
    
    		// .....省略了剩余代码
    	}
    }
    

      启动服务器之后,访问上面这个路径:http://localhost:8080/ssm/download/demo.txt,原本以为会立即下载文件demo.txt,但是却显示:文件不存在,路径:/var/work/download/demo。

      于是我打印了一下接收到的fileName参数,发现打印的是“demo”,而不是“demo.txt”。

    解决方式

      将@RequestMapping注解的value修改一下,使用SpEL即可:

    @RequestMapping("/download/{fileName:.+}")
    

      这样就不会省略请求路径中的文件名了。

      

  • 相关阅读:
    BUUCTF--Youngter-drive
    BUUCTF--CrackRTF
    FireShell CTF 2020 Re Simple Encryption
    2020 美国大学生数学建模论文翻译(week 2)
    仿射密码
    乘法逆元
    RC4加密与解密
    2020 BJDCTF Re encode
    2020美国大学生数学建模(MCM/ICM)A题数据及参考资料
    路由器, 美团笔试题, 差分
  • 原文地址:https://www.cnblogs.com/-beyond/p/10752103.html
Copyright © 2011-2022 走看看