c# - AWSSDK.S3 C# Dll 错误在 PowerShell 控制台中但不在 ISE 中(我们计算的请求签名与您提供的签名不匹配。)
问题描述
我正在尝试从 AWS S3 存储中检索密钥。我的主要目标是拥有一个 dll,我可以从基于 delphi 的系统中将其作为 com 对象执行。
这对于“普通”键非常有效,但是我们有一个保存为“documents/00012000/12368”的键。
(是的,最后有一个句点是 S3 的特殊字符,但是根据 AWS 文档,这应该通过 SDK 工作)。
当我尝试读取对象时,当我通过 PowerShell 控制台运行此 dll 时收到错误“我们计算的请求签名与您提供的签名不匹配。请检查您的密钥和签名方法”,但是如果我通过运行相同的代码它成功执行并检索文件的 PowerShell ISE。
dll中的方法是:
public byte[] getFile(string Bucket, string Key)
{
var credentials = new Amazon.Runtime.BasicAWSCredentials("my key", "my secret");
// Create a client
AmazonS3Client client = new AmazonS3Client(credentials, RegionEndpoint.APSoutheast2);
// Create a GetObject request
GetObjectRequest request = new GetObjectRequest
{
BucketName = Bucket,
Key = Key
};
MemoryStream outputstream = new MemoryStream();
// Issue request and remember to dispose of the response
using (GetObjectResponse response = client.GetObject(request))
{
// Save object to local file
//response.WriteResponseStreamToFile(@"C:\temp\Test.pdf");
response.ResponseStream.CopyTo(outputstream);
return outputstream.ToArray();
}
}
如果我尝试检查文件是否存在,我也会收到一个错误(“错误发出请求,错误代码禁止和 Http 状态代码禁止。服务没有返回进一步的错误信息。),再一次,通过 ISE 它可以工作.
public bool fileExists(string Bucket, string Key)
{
// Create a client
var credentials = new Amazon.Runtime.BasicAWSCredentials("my key", "my secret");
// Create a client
AmazonS3Client client = new AmazonS3Client(credentials, RegionEndpoint.APSoutheast2);
S3FileInfo file = new S3FileInfo(client, Bucket, Key);
return file.Exists;
}
作为旁注,我还创建了一个测试 .net 框架表单应用程序来调用 .net dll 进行测试,它可以工作。
我不知道为什么相同的代码在 ISE 中的行为不同,从 .net 形式的 exe 到 PowerShell 控制台以及从 delphi 调用的 com 对象。
有没有人见过这种行为?
我尝试在从 4.5.2 到 4.7.2 的多个框架中编译 dll,没有任何变化。我还尝试使用带有以下代码的 PowerShell 模块并收到相同的错误:
$Bucket="mybucket"
$s3file="documents/00012000/12368."
Read-S3Object -BucketName $Bucket -accesskey mykey -secretkey mysecret -region ap
-southeast-2 -Key $s3file -File "d:\temp\file.pdf"
我知道避免在结尾处命名一个带有句点的键是理想的,但是我目前无法控制它。
AWSSDK.Core 版本 3.7.1.1(最新稳定版) AWSSDK.S3 版本 3.7.1.17(最新稳定版)
PowerShell 版本 5.1.19041.1023
解决方案
推荐阅读
- typescript - Typescript 或 TSlint 可以对隐式类型转换发出警告吗
- angular - 我已经为我的后端 ASP.NET Core Web api 为本地主机创建了 SSL/TLS 证书,我可以与我的前端 Angular 应用程序共享它吗?
- sharepoint-online - SharePoint Online(现代视图)自定义(列表表单 - NewForm.aspx 等)
- docker - 如何查看在 docker 容器中创建的文件?
- r - RShiny - 有时不显示结果
- python - Tensorflow 使用 python 在 windows 中将 .pb 文件转换为 .lite 文件
- typescript - 从本地函数打字稿调用全局方法
- excel - 如果excel中的任何单元格值发生变化,如何自动运行宏
- c# - 无法将服务器上制作的 OpenXML 文件保存到客户端本地文件夹“拒绝访问”
- jsf - 如何在 Prime Faces 中动态更新 p:outputabel 值