解决阿里云oss sts链接下载重命名问题

本文介绍了如何在阿里云OSS中,由于安全原因导致的下载链接不能直接重命名的问题,通过在STS链接中添加params参数并设置`response-content-disposition`来实现Android设备上文件的重命名,同时提供了一份Python代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

解决阿里云oss sts链接下载重命名问题

背景

android设备中无法通过下载链接来进行重命名

目标

在后端实现返回的sts 链接中带上文件名

方案

通过在sts 链接中添加params信息来重命名

问题点:

出于数据传输安全考虑,使用OSS默认域名或传输加速域名访问某个时间点创建的Bucket内的特定类型文件时(例如Content-Type为text/html、image/jpeg等),OSS会强制在返回头中增加下载Header(x-oss-force-download: true和Content-Disposition: attachment)。标准浏览器检测到Content-Disposition: attachment时,会出现强制下载而不是预览行为。

python代码实现

def get_doc_temp_url(self, object_name, expire_time, file_name=None, is_public=True):
        headers = dict()
        headers['content-disposition'] = 'inline'
	    params = {'response-content-disposition': f"attachment; filename*=UTF-8''{filename}"}

        token = self._get_sts_token(object_name, action="GetObject")
        auth = oss2.StsAuth(token['token']['AccessKeyId'],
                            token['token']['AccessKeySecret'],
                            token['token']['SecurityToken'])

        bucket = oss2.Bucket(auth, self.host, self.bucket)
        headers['file_name'] = file_name
        url = bucket.sign_url('GET', key=object_name, expires=expire_time, headers=headers, params=params)
        if is_public:
            internal_host = urlparse(self.host)
            public_host = urlparse(self.public_host)
            url = url.replace(self.bucket + '.' + internal_host.hostname, public_host.hostname)
        return url

必须设置params参数才能重命名生效,设置header中的content-disposition会被oss强制修改成attachment

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值