腾讯云开发者社区
阿里云存储中,下载文件时设置文件名的方法
阿里云存储中,下载文件时设置文件名的方法
使用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 = new ALIOSS();
$url = $oss->get_sign_url($bucket, $object, $expire, $options);
|
更多推荐
- · Elasticsearch复杂数据类型终极指南:从入门到精通
- · 终极指南:Flink SQL连接器版本管理从混乱到有序的升级之路
- · 如何快速搭建Neon无服务器PostgreSQL:面向初学者的完整指南
1.4w
1
0
- 0
扫一扫分享内容
分享
回到
顶部
顶部
所有评论(0)