我的代码通过生成预先签名的网址来访问Amazon S3存储桶(非公开)中的PDF文件,并将生成的网址传递到PDF.js,以便在浏览器中查看。
我遇到一个问题,每次访问PDF文件时都必须生成一个预先签名的URL,我觉得这很麻烦。我现在的解决方案是将预先签名的URL保存到数据库中并检查它是否已过期。如果已过期,则生成新URL,否则使用现有URL。
我的问题:是否可以在不使用预签名网址的情况下访问对象?
答案 0 :(得分:4)
如果您打算提供一个网页,以便网络浏览器可以打开该文件,那么预先签名的网址绝对是最好的方法。
如果您想通过API调用进行访问,那么您可以使用标准凭据调用Amazon S3 API来访问私有对象,但这不能在Web浏览器中运行。
可以使用几行代码创建预签名的URL - 比将数据库存储在数据库中更快更简单。
我看到您正在使用Python,所以这里有一些来自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)
此代码不会调用AWS!它是根据提供的参数在本地生成的。我在运行generate_presigned_url()
之前断开了我的电脑与网络的测试,并立即返回了结果。
因此,生成签名的URL只需要很少的工作量,实际上没有处理时间。我不明白为什么这对你来说不方便。 (与使用数据库做任何事情相比,它更容易!)