You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于Vapor的Swift后端:如何用AWS SDK for Swift生成S3预签名URL?

使用AWS SDK for Swift生成S3预签名URL(Vapor场景)

功能可用性说明

AWS SDK for Swift完全支持生成S3对象的预签名URL,不存在功能缺失的情况。

实现步骤

1. 配置AWS SDK客户端

在Vapor项目中先完成S3客户端的全局配置,方便后续调用:

import AWSS3
import Vapor

extension Application {
    var s3: S3Client {
        guard let client = self.storage[S3ClientKey.self] else {
            let client = S3Client(region: .usEast1) // 替换为你的S3存储桶所在区域
            self.storage[S3ClientKey.self] = client
            return client
        }
        return client
    }
}

private struct S3ClientKey: StorageKey {
    typealias Value = S3Client
}

2. 生成预签名下载URL

创建Vapor路由处理函数,生成指定PDF文件的预签名URL:

import Vapor
import AWSS3

func routes(_ app: Application) throws {
    app.get("presigned-download-url") { req async throws -> String in
        let bucketName = "your-target-bucket" // 替换为你的存储桶名称
        let objectKey = "pdf-docs/user-manual.pdf" // 替换为目标PDF的对象键
        
        // 构造获取对象的请求
        let getRequest = GetObjectRequest(
            bucket: bucketName,
            key: objectKey
        )
        
        // 生成有效期1小时的预签名URL
        let presignedURL = try await req.application.s3.presignedURL(
            for: getRequest,
            expires: .seconds(3600)
        )
        
        return presignedURL.absoluteString
    }
}

3. 关键注意事项

  • 权限验证:生成URL的AWS凭证必须拥有s3:GetObject权限,否则生成的URL无法访问目标对象。
  • 过期时间限制:S3服务限制预签名URL的最长有效期为7天,可根据业务需求调整expires参数。
  • HTTPS默认支持:生成的预签名URL默认使用HTTPS,确保你的存储桶已配置HTTPS访问。

扩展说明

如果需要生成用于上传的预签名URL,只需将GetObjectRequest替换为PutObjectRequest,调用presignedURL方法的逻辑完全一致。

内容的提问来源于stack exchange,提问作者KVISH

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 17:52:20