#c# #amazon-s3
#c# #amazon-s3
Вопрос:
Я использую AWS SDK для доступа к корзине S3 для ЧТЕНИЯ и ЗАПИСИ объектов на C #. Я смог заставить его работать в проекте .NET в соответствии с инструкциями, приведенными в документации. Я хочу ограничить общедоступный доступ к корзине и предоставить истекающую общедоступную ссылку на объект.
Я обнаружил, что это можно сделать с помощью GeneratePreSignedURL
метода. Он выдает строку URL-адреса в приведенном ниже формате.
https://<BUCKET_NAME>.s3.<REGION>.amazonaws.com/<KEY>?X-Amz-Expires=-46077amp;X-Amz-Algorithm=AWS4-HMAC-SHA256amp;X-Amz-Credential=<GENERATED_CRED>amp;X-Amz-Date=20201122T071756Zamp;X-Amz-SignedHeaders=hostamp;X-Amz-Signature=<GENERATED_SIG>
Затем я помещаю этот URL-адрес в окно браузера, чтобы проверить, работает ли он должным образом. Проблема в том, что я получаю сообщение об ошибке X-Amz-Expires must be non-negative
Ответ почтальона :
<Error>
<Code>AuthorizationQueryParametersError</Code>
<Message>X-Amz-Expires must be non-negative</Message>
<RequestId>3ZCYDRAH2W3MET8P</RequestId>
<HostId>f9BnxF5xXJIkklXfwMPVCxFSJLIkPxijzElqqA3bEcbt7PqY/lhzm6rbQ8KFzICy3B1J/Stdvf8=</HostId>
</Error>
В методе, который предоставляет SDK, я предоставляю положительное двойное значение для expiration
значения, поэтому я не уверен, как сгенерированный URL-адрес имеет X-Amz-Expires=-46077
. Любая идея по этому поводу была бы очень полезна, спасибо.
Комментарии:
1. Я не могу найти никаких ссылок на
GetFilePublicURL
, это метод, который вы создали? Вы должны поделиться некоторым кодом своей попытки, а также тем, какой срок действия вы использовали. Это звучит так, как будто вы использовали истечение срока действия в прошлом.2. @Shoejep ой!! извините
GeneratePreSignedURL
, я исправлю вопрос. Спасибо, что указали на это.._s3Client.GeneratePreSignedURL(bucketName, key, DateTime.Now.Date, null);
вот строка кода, которая генерирует URL-адрес.3. @Shoejep Я попытался установить значение типа 15, используя
DateTime.Now.AddMinute(15).Date
для строки_s3Client.GeneratePreSignedURL(bucketName, key, DateTime.Now.Date, null);
, это ничего не решило..4. Использование
DateTime.Now.AddMinute(15).Date
звучит так, как будто это может быть вашей проблемой,.Date
удаляет временную составляющую DateTime. Просто сделайтеDateTime.Now.AddMinutes(15)
Ответ №1:
Вы должны использовать DateTime.Now.AddMinutes(15)
вместо DateTime.Now.AddMinute(15).Date
.
.Date
удаляет временную составляющую DateTime
Как описано в документации для .Date
Новый объект с той же датой, что и у этого экземпляра, и значением времени, установленным на 12:00:00 полночь (00:00:00).