我正在尝试将文件保存到S3存储桶。我将文件复制到临时位置,只是(对我而言)证明文件存在并且可以访问。当然,该副本可以正常工作。
最后一行不断抛出异常,详细信息为“对象引用未设置为对象的实例”。
File.Copy(fullFilePath, "C:\\Temp\\" + fullFileName);
IAmazonS3 client = null;
if (Session["s3Client"] != null) {
client = (IAmazonS3)Session["s3Client"];
} else {
client = new AmazonS3Client(RegionEndpoint.GetBySystemName(AWS_REGION));
} // if
PutObjectRequest putRequest = new PutObjectRequest {
BucketName = S3_BUCKET_NAME,
Key = fullFileName
};
using (FileStream stream = new FileStream(fullFilePath, FileMode.Open)) {
putRequest.InputStream = stream;
// Put object
PutObjectResponse response = client.PutObject(putRequest);
}
我已经通过S3呼叫尝试了一些方法:
由于我实际上仅提供3个字段,因此我没有太多尝试的机会。
我正在尝试将身份验证放在代码之外,以便主机可以控制它。
有什么想法吗?
非常感谢。
编辑:
at Amazon.Runtime.DefaultInstanceProfileAWSCredentials.FetchCredentials()
at Amazon.Runtime.DefaultInstanceProfileAWSCredentials.GetCredentials()
at Amazon.Runtime.Internal.CredentialsRetriever.PreInvoke(IExecutionContext executionContext)
at Amazon.Runtime.Internal.CredentialsRetriever.InvokeSync(IExecutionContext executionContext)
at Amazon.Runtime.Internal.RetryHandler.InvokeSync(IExecutionContext executionContext)
at Amazon.Runtime.Internal.CallbackHandler.InvokeSync(IExecutionContext executionContext)
at Amazon.Runtime.Internal.CallbackHandler.InvokeSync(IExecutionContext executionContext)
at Amazon.S3.Internal.AmazonS3ExceptionHandler.InvokeSync(IExecutionContext executionContext)
at Amazon.Runtime.Internal.ErrorCallbackHandler.InvokeSync(IExecutionContext executionContext)
at Amazon.Runtime.Internal.MetricsHandler.InvokeSync(IExecutionContext executionContext)
at Amazon.Runtime.Internal.RuntimePipeline.InvokeSync(IExecutionContext executionContext)
at Amazon.Runtime.AmazonServiceClient.Invoke[TResponse](AmazonWebServiceRequest request, InvokeOptionsBase options)
at MyCode.aspx.cs:line 260
答案 0 :(得分:1)
这个问题都与IIS权限有关。 AWS试图通过web.config文件中的条目访问凭据:
<configSections>
<section name="aws" type="Amazon.AWSSection, AWSSDK.Core"/>
</configSections>
<aws profileName="default" profilesLocation="C:\Users\Administrator\.aws\credentials"/>
IIS运行时,它无权访问上面列出的凭据文件。
解决方案是为defaultAppPool授予对该文件的读取权限。我是通过在目录的“安全性”选项卡中添加“ IIS APPPOOL \ defaultAppPool”来确保其具有读取权限的。
AWS的错误非常严重。正确的错误消息,我可以节省很多时间。