关于文件下载的问题

ComputerXT 2004-11-21 03:53:54
为了防止匿名用户下载文件,我在校验用户权限后用一下代码输出文件:

$file = fopen($record['path'],"r");
Header("Content-type: application/octet-stream");
Header("Accept-Ranges: bytes");
Header("Accept-Length: ".filesize($record['path']));
Header("Content-Disposition: attachment; filename=" .basename($record['path']));
echo fread($file,filesize($record['path']));
fclose($file);

但是用户不能在网页中直接浏览该文件,比如输出文件是PDF格式的时候,不能直接在浏览器中通过Acrobat Reader打开,提示找不到文件路径的错误;而是要先下载再打开!请问各位有什么方法可以解决这个问题?
...全文
152 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
ComputerXT 2004-11-22
  • 打赏
  • 举报
回复
改成:
header("Content-type: application/pdf");
Header("Accept-Ranges: bytes");
Header("Accept-Length: ".filesize($record['path']));
Header("Content-Disposition: attachment; filename=" .basename($record['path']));
echo fread($file,filesize($record['path']));
fclose($file);
后在浏览器中打开还是提示“当打开本文档时发生错误,本文件未找到”的错误!
ComputerXT 2004-11-22
  • 打赏
  • 举报
回复
1、我说的是在客户端安装了相应格式的阅览器的情况下的。
2、因为文件可能有很多种格式,比如pdf、word等等,那我如果写成Header("Content-type: application/pdf"),那其他格式的怎么办?有什么办法可以达到像普通的通过链接下载的方式一样,对各种类型的文件,既可以选择“另存为”,也可以直接选择“在浏览器中打开”!都能够正常浏览内容!
zairwolfi 2004-11-21
  • 打赏
  • 举报
回复
同意。替换header内容。
hahawen 2004-11-21
  • 打赏
  • 举报
回复
客户端必须装了acrobat reader 才行
hahawen 2004-11-21
  • 打赏
  • 举报
回复
Header("Content-type: application/pdf");

替换
turtlevan 2004-11-21
  • 打赏
  • 举报
回复
你要先判断浏览器accept的mime type吧,
比如pdf

如果客户端装了acrobat reader
我觉得去掉下面这一行就可以了
Header("Content-Disposition: attachment; filename=" .basename($record['path']));

21,882

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧