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:.+}")
这样就不会省略请求路径中的文件名了。
SpringMVC实现文件下载时,请求路径中的扩展名被省略的更多相关文章
- jmeter接口测试-GET请求路径中包含特殊字符或中文导致Response400报错
问题描述:接口测试中异常用例GET请求路径中包含特殊字符或中文,运行jmeter会报错,取样器中只能看到Response400,响应结果为空 解决思路: 对于通过BODY发送的中文内容可以用Jmete ...
- Window中显示文件扩展名
积少成多,欢迎大家关注我的微信公众号,共同探讨Java相关技术 本文主要介绍如何在Windows系统中怎么让文件显示扩展名. 操作步骤 打开控制面板 找到外观和个性化 找到文件资源管理器选项 单击,然 ...
- python获取某路径下某扩展名的所有文件名和文件个数
# -*- coding: utf-8 -*- # @Time : 19-1-10 下午10:02 # @Author : Felix Wang import os def get_file_coun ...
- python工具程序一、复制目录中指定扩展名的文件
#!/usr/bin/env python # coding:utf-8 # xcopy Lib directory and rename all files to *d.lib import os ...
- C# 导出Excel文件 所导出文件打开时提示“Excel文件格式与扩展名指定格式不一致”
Microsoft.Office.Interop.Excel.Application xlApp = new Microsoft.Office.Interop.Excel.Application(); ...
- SpringMVC 请求路径结尾存在.使用@PathVariable访问路径内容,路径参数获取不准确的问题
SpringMVC采用Get方式请求资源时,如果请求路径的结尾中带有小数点(.)时,同时使用@PathVariable访问路径内容时,请求路径中最后一个小数点及其后面的内容会被Spring截断丢弃比如 ...
- SpringMVC注解汇总(二)-请求映射规则
接上一节SpringMVC注解汇总-定义 讲到Httpy请求信息 URL路径映射 1)普通URL路径映射 @RequestMapping(value={"/test1", &quo ...
- tomcat对请求路径的匹配过程(原创)
1.匹配服务 如果有两个应用,一个应用只能通过80端口访问,另一个应用只能通过8080端口访问,这种情况下,可以分开两个服务,然后分别创建80端口和8080端口的连接器. 2.匹配主机 一个服务下配置 ...
- yum中baserul路径中的空格
配置yum源时,比如指定本地挂载的光盘时,路径中包含空格.在不使用链接的情况下,用"\"进行转义不行,把路径加单.双引号也不可行.正确做法是把空格用%20代替.同理,其他不可识别的 ...
随机推荐
- mysql的学习笔记(一)
前言 开发中经常用mysql和SQL server交替使用,自己都产生知识的混乱.在这里重新整理下mysql的知识,也是梳理自己知识点,因为是学习笔记,所以并不会使用到图形化管理工具.mysql的安装 ...
- 【Android Studio安装部署系列】二十八、Android Studio查看其它APP的布局结构
概述 日常使用别家的APP过程中,会遇到一些比较好看的布局,这时候我们就想学习一下别人的布局结构,以便参考. (1)手机连接电脑.设置手机为USB调试模式 参考<[Android Studio安 ...
- pycharm安装svn插件
弄了svn的服务端和客户端,为了方便我pycharm的使用,我又在pycharm里进行了配置,要用到subversion 下载 https://sourceforge.net/projects/win ...
- springboot~yml里的自定义配置
主要介绍三种,字符串配置,数组配置和带默认值的配置 字符串配置 //yml setString: hello /** * 字符串. */ @Value("${setString}" ...
- 10-Flink集群的高可用(搭建篇补充)
戳更多文章: 1-Flink入门 2-本地环境搭建&构建第一个Flink应用 3-DataSet API 4-DataSteam API 5-集群部署 6-分布式缓存 7-重启策略 8-Fli ...
- 多线程协作wait、notify、notifyAll方法简介理解使用 多线程中篇(十四)
在锁与监视器中有对wait和notify以及notifyAll进行了简单介绍 所有对象都有一个与之关联的锁与监视器 wait和notify以及notifyAll之所以是Object的方法就是因为任何一 ...
- Autofac 和 Quartz.Net 自动注入的整合
一:问题场景 在一次项目开发中,项目中已使用了Autofac.在新需求中要用到Quatrz.Net.在任务中使用注入方法,确始终无法使用注入的方法,经过千百次的度娘,终于找到了解决办法!吐槽下度娘真心 ...
- springboot源码分析-SpringApplication
SpringApplication SpringApplication类提供了一种方便的方法来引导从main()方法启动的Spring应用程序 SpringBoot 包扫描注解源码分析 @Spring ...
- Android为TV端助力:adb查找包名位置
logcat | grep START 查找启动launcher adb shell "pm list packages -f | grep +包名" 查找包的路径
- 每天五分钟-javascript数据类型
javascript数据类型分为基本数据类型与复杂数据类型 基本数据类型包括:string,number,boolean,null,undefined,symbol(es6) 复杂数据类型包括:obj ...