Ссылка на объект не установлена ​​на экземпляр объекта при использовании AWS S3 API из IIS .Net ASP.Net - PullRequest
0 голосов
/ 18 июня 2019

Я пытаюсь сохранить файл в корзину 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:

  1. Другой ключ (пробовал слово «бла»)
  2. Другой контейнер
  3. Отправка файла в виде пути, а не потока

Не так много для меня, чтобы попробовать, так как я на самом деле только 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

1 Ответ

1 голос
/ 19 июня 2019

Эта проблема была связана с разрешениями IIS.AWS пытался получить доступ к учетным данным через записи в файле web.config:

<configSections>
  <section name="aws" type="Amazon.AWSSection, AWSSDK.Core"/>
</configSections>
<aws profileName="default" profilesLocation="C:\Users\Administrator\.aws\credentials"/>

Когда IIS работает, он не имеет доступа к файлу учетных данных, указанному выше.

Решением было предоставить доступ к файлу по умолчанию для AppPool.Я сделал это, добавив «IIS APPPOOL \ defaultAppPool» на вкладку безопасности каталога, убедившись, что у него есть доступ для чтения.

enter image description here

Ошибка от AWSзверскоеПравильное сообщение об ошибке, и я бы сэкономил много времени.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...