我有一个页面,允许用户下载存储在数据库中的文件.此页面仅使用GET变量在数据库表中查找相应的ID,并将该文件作为附件返回到文件的标题中.
header("Content-length: $objFile->size");
header("Content-type: $objFile->type");
header("Content-disposition: attachment; filename=".($objFile->name));
我遇到的问题是,如果上传到数据库中的文件包含名称中的空格,例如“3 Year Spending Analysis.pdf”,那么当文件返回下载时,文件名将仅为“3”,因为名字中的空间.
我已经尝试过urlencode,rawurlencode等,但没有得到完整文件名的预期结果.
解决方法:
把它放在引号内:
header('Content-disposition: attachment; filename="'.($objFile->name).'"');
Here是HTTP规范的相关部分.
更新:从技术上讲,这应该是读
str_replace('"', '\\"', $objFile->name)
因为HTTP规范声明必须使用反斜杠转义带引号的字符串中的双引号字符.在实践中,您不希望文件名中包含双引号(我甚至不确定哪个文件系统允许它),但是为了100%保证合规性,需要str_replace.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。