我有一个tableview,可以从Heroku上的postgres数据库中获取数据。 tableview的每个单元表示存储在S3上的音频文件。我使用postgres为每个单元格返回的trackID
来创建一个如下所示的URL来访问音频文件:
let audioURL = "https://s3.amazonaws.com/<bucketname>/<trackID>.m4a"
self.player!.audioPlayer = try AVAudioPlayer(contentsOf: audioURL)
这将导致错误,因为我无法直接访问S3文件。我相信我需要pre-signed urls
boto3
才能对文件提出GET
请求。我是否应该在选择播放文件时生成预先签名的网址,还是在制作原始获取请求时是否应该为每个文件获取预先签名的网址?
答案 0 :(得分:0)
预先签名的网址有一个到期时间,默认为boto3
中的一小时。在选择文件时生成它们可能会更好。
答案 1 :(得分:0)
Pre-Signed URL是一种提供对存储在Amazon S3中的私有对象的临时访问的方法。
预签名网址包含:
预先签名的网址可以从几行代码生成,只有当GET请求发送到Amazon S3时才评估。
使用Amazon S3获取网页的对象时,应在服务器端生成预签名的URL,以便不将凭据发送到客户端。因此,预生成的URL将在生成HTML时生成。
但是,您似乎正在为 iOS 编码。因此,有两种可能的情况:
第一种方法是通过允许iOS应用程序直接从Amazon S3请求内容来减少后端服务器上的负载。第二种方法提供了在授予访问权限之前检查每个文件访问的能力,并且具有可以轻松记录每个请求的好处。