利用OSS(阿里云开放云存储)存储文件时,为了担保文件的安详性和独一性,文件名全部sha1加密过了。可是这样的话,当用户下载文件时,文件名会是一堆加密串(如:651a53c4ea021589c00e26b5d0d50b96dfafb2d7.doc),如何才气让用户下载文件时是原名(如:周伯通雇用.doc)?
靠谱的要领有两种:
1. 上传文件至OSS时配置HTTP的Content-Disposition头符号。
1
2
3
$options[ALIOSS::OSS_HEADERS]=array(
ALIOSS::OSS_CONTENT_DISPOSTION=>"attachment;filename="{$download_name}"",
);
2. 获取文件的下载链接(get_site_url)时配置Content-Disposition符号。
假如差异用户下载同一个文件时利用差异的文件名,要领1就白费了,只能用要领2。
第一步,修复阿里云PHP SDK V1.1.5的一个Bug(V2应该没有这个Bug了),sdk.class.php第452行,由
1
2
3
4
$signable_list=array(
'partNumber',
'uploadId',
);
修改为:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
$signable_list=array(
'partNumber',
'uploadId',
// 2013.11.13 杨德升
// 修复当$options配置response-*参数时加密错误的Bug
'acl',
'uploads',
'response-cache-control',
'response-content-disposition',
'response-content-encoding',
'response-content-language',
'response-content-type',
'response-expires',
// END
);
第二步,get_sign_url时配置Content-Disposition:
1
2
3
4
5
$download_name=rawurlencode($download_name);
$options['response-content-disposition']="attachment;filename="{$download_name}"";
$oss=newALIOSS();
$url= $oss->get_sign_url($bucket,$object,$expire,$options);