我的代码通过生成 pre-signed url 来访问Amazon S3存储桶(非公共)中的PDF文件,并将生成的URL传递给PDF.js以在浏览器中查看它 .
我遇到一个问题,每次访问PDF文件时都必须生成一个预先签名的URL,我觉得这很麻烦 . 我现在的解决方案是将预先签名的URL保存到数据库中并检查它是否已过期 . 如果已过期,则生成新URL,否则使用现有URL .
我的问题:是否可以在不使用预签名URL的情况下访问对象?
如果您打算提供一个URL,使Web浏览器可以打开该文件,那么预先签名的URL肯定是最好的方法 .
如果您想通过API调用进行访问,那么您可以使用标准凭据调用Amazon S3 API来访问私有对象,但这不适用于Web浏览器 .
可以使用几行代码创建预签名URL - 比在数据库中存储URL快得多,也简单得多 .
我看到're using Python, so here'的一些示例代码来自how to generate url from boto3 in amazon web services:
import boto3 s3Client = boto3.client('s3') s3Client.generate_presigned_url('get_object', Params = {'Bucket': 'www.mybucket.com', 'Key': 'hello.txt'}, ExpiresIn = 100)
此代码 does not make a call to AWS! 它是根据提供的参数在本地生成的 . 我在运行 generate_presigned_url() 之前断开了我的计算机与网络的测试,并立即返回结果 .
generate_presigned_url()
因此,生成签名URL只需要很少的工作量,并且实际上没有处理时间 . 我不明白为什么这对你来说不方便 . (这比使用数据库做任何事都容易!)
1 回答
如果您打算提供一个URL,使Web浏览器可以打开该文件,那么预先签名的URL肯定是最好的方法 .
如果您想通过API调用进行访问,那么您可以使用标准凭据调用Amazon S3 API来访问私有对象,但这不适用于Web浏览器 .
可以使用几行代码创建预签名URL - 比在数据库中存储URL快得多,也简单得多 .
我看到're using Python, so here'的一些示例代码来自how to generate url from boto3 in amazon web services:
此代码 does not make a call to AWS! 它是根据提供的参数在本地生成的 . 我在运行
generate_presigned_url()
之前断开了我的计算机与网络的测试,并立即返回结果 .因此,生成签名URL只需要很少的工作量,并且实际上没有处理时间 . 我不明白为什么这对你来说不方便 . (这比使用数据库做任何事都容易!)