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:.+}")

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

  

posted @ 2019-04-22 18:56  寻觅beyond  阅读(443)  评论(0编辑  收藏  举报
返回顶部