阿里云存储中,下载文件时设置文件名的方法

使用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);

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/167f8262ed12f5d5f19c615dc5fb9b5b.html