我正在使用 Vapor 构建服务器端 Swift 应用程序,并使用 AWS SDK for Swift 与 S3 进行交互。
我想为对象创建预签名 URL,以便用户可以下载和查看 PDF 文档。
如何使用 SDK 做到这一点?我是否可以假设 Swift SDK 中尚不提供此功能?
我是否可以假设 Swift SDK 中尚不提供此功能?
不,它在 SDK 中可用,但由于适用于 Swift 的 AWS 开发工具包仍处于开发人员预览版,因此文档非常稀疏。
在
.presignURL
和 GetObjectInput
结构上使用 PutObjectInput
扩展来生成用于下载和上传 S3 对象的预签名 URL。
这是我写的一个完整的示例:
// main.swift
import AWSS3
import Foundation.NSTimeZone
let region = "eu-west-1"
let expirationInSeconds : TimeInterval = 3600;
let bucketName = "my-bucket-name"
let objectName = "my-object-name"
let putObjectRequest = PutObjectInput(bucket: bucketName, key: objectName)
let uploadUrl = try await putObjectRequest.presignURL(config: S3Client.S3ClientConfiguration(region: region), expiration: expirationInSeconds);
if let uploadUrl = uploadUrl {
print("Upload URL: \(uploadUrl)")
}
let getObjectRequest = GetObjectInput(bucket: bucketName, key: objectName)
let downloadUrl = try await getObjectRequest.presignURL(config: S3Client.S3ClientConfiguration(region: region), expiration: expirationInSeconds);
if let downloadUrl = downloadUrl {
print("Download URL: \(downloadUrl)")
}
// Package.swift
// swift-tools-version: 5.9
import PackageDescription
let package = Package(
name: "PackageName",
platforms: [.macOS(.v10_15), .iOS(.v13)],
dependencies: [
.package(url: "https://github.com/awslabs/aws-sdk-swift.git", from: "0.27.0")
],
targets: [
.executableTarget(
name: "ExecutableName",
dependencies: [
.product(name: "AWSS3", package: "aws-sdk-swift")
],
path: "Sources"
)
]
)
输出:
程序以退出代码结束:0