javascript - 文件名中带#的文件下载失败
问题描述
背景
我有一个在 CentOS 服务器上运行的 PHP 应用程序。前端使用 ajax 调用来访问 PHP 脚本。该脚本从服务器返回一个文件并将其下载到客户端。
问题
如果文件#
名中有 ,则文件下载失败。
例子
File#Name.pdf
= 无法正确下载
FileName.pdf
= 是否正确下载
这是用于检索文件的 PHP,
if( isset($_GET['path'])) {
$path = $_GET['path'];
if(!file_exists($path)) {
die('file not found');
} else {
header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename='.$path);
header('Content-Length: '.filesize($path));
readfile($path);
ob_clean();
flush();
exit;
}
}
问题
为什么在名称中时文件无法下载#
?
解决方案
啊,文件名是来自 GET 请求吗?如果是这样,# 可能会被重写为 %23。尝试
$path = urldecode($_GET['path']);
推荐阅读
- linux - 如何在 LORA 中从网关到网关桥创建和发送包
- javascript - 验证xml树的某个节点是否为空
- apache-camel - 骆驼头中的多个命名空间
- c++ - void 函数中的指针参数返回不一致的值
- java - 泛型类输入参数类型未匹配
- excel - 从excel读取多组行并将其放在不同的文件中
- bash - 在 Bash 中将多行字符串转换为单个逗号分隔的列表
- javascript - 停止子 DIV 以从其父页面继承样式
- javascript - Django模板中的Javascript中的“未捕获的语法错误:意外的标识符”
- ruby-on-rails - 无法在 docker 中启动 sphinxsearch