Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
hexbee
Cloudreve
提交
899ee59c
C
Cloudreve
项目概览
hexbee
/
Cloudreve
通知
2
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
C
Cloudreve
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
899ee59c
编写于
8月 04, 2018
作者:
Y
Yuanuo
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
修复X-Sendfile模式时附件文件名和Content-Type异常的问题。
1,针对各浏览器的附件文件名的不同头信息格式。 2,解决Content-Type为text/html的问题。
上级
a1a9f7cd
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
34 addition
and
7 deletion
+34
-7
application/index/model/FileManage.php
application/index/model/FileManage.php
+34
-7
未找到文件。
application/index/model/FileManage.php
浏览文件 @
899ee59c
...
...
@@ -877,16 +877,33 @@ class FileManage extends Model{
$filePath
=
'/public/uploads/'
.
$this
->
fileData
[
"pre_name"
];
}
if
(
$download
){
header
(
'Content-Disposition: attachment; filename="'
.
str_replace
(
","
,
""
,
$this
->
fileData
[
"orign_name"
])
.
'"'
);
header
(
"Content-type: application/octet-stream"
);
header
(
'Content-Length: '
.
(
string
)(
filesize
(
$realPath
))
);
$filePath
=
str_replace
(
"
\\
"
,
"/"
,
$filePath
);
if
(
$header
==
"X-Accel-Redirect"
){
ob_flush
();
flush
();
echo
"s"
;
}
header
(
$header
.
": "
.
str_replace
(
'%2F'
,
'/'
,
rawurlencode
(
$filePath
)));
//保证如下顺序,否则最终浏览器中得到的content-type为'text/html'
//1,写入 X-Sendfile 头信息
$pathToFile
=
str_replace
(
'%2F'
,
'/'
,
rawurlencode
(
$filePath
));
header
(
$header
.
": "
.
$pathToFile
);
//2,写入Content-Type头信息
$mime_type
=
self
::
getMimetypeOnly
(
$realPath
);
header
(
'Content-Type: '
.
$mime_type
);
//3,写入正确的附件文件名头信息
$orign_fname
=
$this
->
fileData
[
"orign_name"
];
$ua
=
$_SERVER
[
"HTTP_USER_AGENT"
];
// 处理不同浏览器的兼容性
if
(
preg_match
(
"/Firefox/"
,
$ua
))
{
$encoded_filename
=
rawurlencode
(
$orign_fname
);
header
(
"Content-Disposition: attachment; filename*=
\"
utf8''"
.
$encoded_filename
.
'"'
);
}
else
if
(
preg_match
(
"/MSIE/"
,
$ua
)
||
preg_match
(
"/Edge/"
,
$ua
)
||
preg_match
(
"/rv:/"
,
$ua
))
{
$encoded_filename
=
rawurlencode
(
$orign_fname
);
header
(
'Content-Disposition: attachment; filename="'
.
$encoded_filename
.
'"'
);
}
else
{
// for Chrome,Safari etc.
header
(
'Content-Disposition: attachment;filename="'
.
$orign_fname
.
'";filename*=utf-8'
.
"''"
.
$orign_fname
);
}
exit
;
}
else
{
$filePath
=
str_replace
(
"
\\
"
,
"/"
,
$filePath
);
header
(
'Content-Type: '
.
self
::
getMimetype
(
$realPath
));
...
...
@@ -918,7 +935,8 @@ class FileManage extends Model{
header
(
'Cache-control: private'
);
header
(
'Content-Type: application/octet-stream'
);
header
(
'Content-Length: '
.
filesize
(
$filePath
));
header
(
'Content-Disposition: filename='
.
str_replace
(
","
,
""
,
$this
->
fileData
[
"orign_name"
]));
$encoded_fname
=
rawurlencode
(
$this
->
fileData
[
"orign_name"
]);
header
(
'Content-Disposition: attachment;filename="'
.
$encoded_fname
.
'";filename*=utf-8'
.
"''"
.
$encoded_fname
);
ob_flush
();
flush
();
}
...
...
@@ -950,7 +968,8 @@ class FileManage extends Model{
header
(
'Cache-control: private'
);
header
(
'Content-Type: application/octet-stream'
);
header
(
'Content-Length: '
.
filesize
(
$filePath
));
header
(
'Content-Disposition: filename='
.
$this
->
fileData
[
"orign_name"
]);
$encoded_fname
=
rawurlencode
(
$this
->
fileData
[
"orign_name"
]);
header
(
'Content-Disposition: attachment;filename="'
.
$encoded_fname
.
'";filename*=utf-8'
.
"''"
.
$encoded_fname
);
ob_flush
();
flush
();
}
else
{
...
...
@@ -971,7 +990,15 @@ class FileManage extends Model{
}
static
function
getMimetype
(
$path
){
$finfoObj
=
finfo_open
(
FILEINFO_MIME
);
//FILEINFO_MIME will output something like "image/jpeg; charset=binary"
$finfoObj
=
finfo_open
(
FILEINFO_MIME
);
$mimetype
=
finfo_file
(
$finfoObj
,
$path
);
finfo_close
(
$finfoObj
);
return
$mimetype
;
}
static
function
getMimetypeOnly
(
$path
){
//FILEINFO_MIME_TYPE will output something like "image/jpeg"
$finfoObj
=
finfo_open
(
FILEINFO_MIME_TYPE
);
$mimetype
=
finfo_file
(
$finfoObj
,
$path
);
finfo_close
(
$finfoObj
);
return
$mimetype
;
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录