c# - AWSSDK 未生成新的 PreSigned URL(始终过期)
问题描述
我有一个私有存储桶,它生成在 300 秒(5 分钟)内过期的预签名 URL,总共存储了 10 个图像,但 1 个图像总是生成一个过期的 URL(它从不更新过期时间)。我尝试过在不同的计算机上使用不同的浏览器和设备,这不是缓存或临时问题。
我正在使用 AWSSDK 1.5.2.2,生成 URL 的代码如下:
public string GetPreSignedURL(string bucketName, string keyName, System.DateTime expiration)
{
GetPreSignedUrlRequest urlRequest = new GetPreSignedUrlRequest();
urlRequest.BucketName = bucketName;
urlRequest.Key = keyName;
urlRequest.Expires = expiration;
urlRequest.Protocol = this.AwsProtocol;
return this.S3.GetPreSignedURL(urlRequest);
}
我这样称呼它:
this.image = this.AWSManager.GetPreSignedURL(bucketName, keyName, this.GetExpireTime());
GetExpireTime() 方法是这样的:
private DateTime GetExpireTime()
{
int expireTime;
try
{
expireTime = Convert.ToInt32(System.Configuration.ConfigurationManager.AppSettings["expireTime"].ToString());
}
catch
{
expireTime = defaultExpireTime;
}
return DateTime.Now.AddSeconds(expireTime);
}
在 AWS 中存储的 10 个图像中,总是有一个,并且每次生成时返回相同 URL 的相同图像(仅在生产中发生,因此我无法调试)。我将开发环境连接到生产存储桶,并复制了数据库寄存器以查看是否可以复制问题,但在我的本地计算机上生成的 URL 很好。
这是上午 9:34 生成的 URL:
https://gtidev-masorden.s3.amazonaws.com/P4285735_thumbnail.png?AWSAccessKeyId=AKIAJTCJB4KPHVI4HTXQ&Expires=1550177695&Signature=f0Llq2syEvDvgdhxYHeedHCpD8s%3D
这是在上午 10:00 生成的:
https://gtidev-masorden.s3.amazonaws.com/P4285735_thumbnail.png?AWSAccessKeyId=AKIAJTCJB4KPHVI4HTXQ&Expires=1550177695&Signature=f0Llq2syEvDvgdhxYHeedHCpD8s%3D
我在这里比较每个生成的 URL:
https://text-compare.com/
它始终是同一个 URL,Expires 参数或 Signature 参数没有变化。当我重新上传图片时,它再次开始生成有效的网址,但几分钟后,另一张图片开始失败。
编辑:我已经请求相同的图像大约 4 天,并且到期日期是相同的。当我在新选项卡中打开 URL 时,它是这样说的:
<Error>
<Code>AccessDenied</Code>
<Message>Request has expired</Message>
<Expires>2019-02-14T20:54:55Z</Expires>
<ServerTime>2019-02-18T17:09:27Z</ServerTime>
<RequestId>C78E43335EE8E845</RequestId>
<HostId>
PPHXhK6Oj7PEKOqb8io1IcVY6mfqNM5zc89ttLylzH/DKPldIo0v8pukdW4SZmqACAVn8WSyIu0=
</HostId>
</Error>
也许我错过了一些东西,我不想更新 AWSSDK,因为其他项目依赖它。有任何想法吗?
解决方案
推荐阅读
- html - WebStorm - 实时模板 - Twig + Html 不起作用
- reactjs - 如何删除 React Navigation 5 中每个选项卡屏幕的标题?
- kubernetes - 微服务 API 网关和 Identity Server 4 kubernates
- php - localhost:xxxx 数据库连接更改为 TCP/IP?
- reactjs - React Hook 函数 useEffect
- mysql - 查询列出与指定用户回答类似问题的用户
- angular - 在检查要在单元测试中定义的 gridOptions.api 后触发 onGridReady 事件时,gridOptions.api 为 null
- java - Java 2D 旋转 BufferedImage
- javascript - D3 GeoJSON 仅在矩形中渲染部分地图
- python - 如何让我的屏幕在 pygame 中放大和缩小?