如何使用适用于 Swift 的 AWS 开发工具包生成预签名 URL?

问题描述 投票:0回答:1

我正在使用 Vapor 构建服务器端 Swift 应用程序,并使用 AWS SDK for Swift 与 S3 进行交互。

我想为对象创建预签名 URL,以便用户可以下载和查看 PDF 文档。

如何使用 SDK 做到这一点?我是否可以假设 Swift SDK 中尚不提供此功能?

swift amazon-web-services amazon-s3 vapor aws-sdk-swift
1个回答
3
投票

我是否可以假设 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"
        )
    ]
)

输出:

上传网址:https://my-bucket-name.s3.eu-west-1.amazonaws.com/my-object-name?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=xxxx %2Feu-west-1%2Fs3%2Faws4_request&X-Amz-Date=20231012T154344Z&X-Amz-SignedHeaders=主机&X-Amz-Expires=3600&X-Amz-Signature=xxx

下载网址:https://my-bucket-name.s3.eu-west-1.amazonaws.com/my-object-name?Bucket=my-bucket-name&Key=my-object-name&X-Amz-Algorithm =AWS4-HMAC-SHA256&X-Amz-Credential=xxx%2Feu-west-1%2Fs3%2Faws4_request&X-Amz-Date=20231012T154344Z&X-Amz-SignedHeaders=主机&X-Amz-Expires=3600&X-Amz-Signature=xxx

程序以退出代码结束:0

© www.soinside.com 2019 - 2024. All rights reserved.