Предписанный URL-адрес AWS S3 Получите взамен возвращаемый ListBucketResult - PullRequest
1 голос
/ 01 июля 2019

Я пытаюсь получить заранее заданный URL-адрес для доступа к изображению в моем личном хранилище, используя метод GetPreSignedUrlRequest.

Мой код выглядит следующим образом:

public string GetPresignedImageURL(string keyString)
{
    string urlString = "";
    try
    {
        GetPreSignedUrlRequest request = new GetPreSignedUrlRequest
        {
            BucketName = bucket,
            Key = keyString,
            Expires = DateTime.Now.AddMinutes(5)
        };
        urlString = _client.GetPreSignedURL(request);
     }
     catch (AmazonS3Exception e)
     {
         Console.WriteLine("Error encountered on server. Message:'{0}' when writing an object", e.Message);
     }
     catch (Exception e)
     {
         Console.WriteLine("Unknown encountered on server. Message:'{0}' when writing an object", e.Message);
     }
     return urlString;
}

Я передал ключ от объекта, который я получаю, например. 0BE1137F0F3E4703A0F0689346B49871_0.jpg.

Однако это ответный URL, который я получаю. Он не добавлял ключ объекта к ответу, только заголовки подписи.

https://<bucket>.ap-southeast-1.amazonaws.com/?X-Amz-Expires=300&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=<credential>/20190701/ap-southeast-1/s3/aws4_request&X-Amz-Date=20190701T065534Z&X-Amz-SignedHeaders=host&X-Amz-Signature=<signature>

Если я вставлю эту ссылку в браузер, это будет означать, что это запрос ListBucketResult.

This XML file does not appear to have any style information associated with it. The document tree is shown below.
<ListBucketResult xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
    <Name>bucket</Name>
    <Prefix/>
    <Marker/>
    <MaxKeys>1000</MaxKeys>
    <IsTruncated>false</IsTruncated>
<Contents>
    <Key>0BE1137F0F3E4703A0F0689346B49871_0.jpg</Key>
    <LastModified>2019-07-01T06:52:17.000Z</LastModified>
    <ETag>"89db9b468ba0eb45600ed9603fe9f41d"</ETag>
    <Size>1621409</Size>
    <Owner>...</Owner>
    <StorageClass>STANDARD</StorageClass>
</Contents>
<Contents>
    <Key>18F6F2B700A747F983DB26EBC8F3E92F_0.jpg</Key>
    <LastModified>2019-06-28T08:44:40.000Z</LastModified>
    <ETag>"61aa2a6270ec840b185331646ee884a2"</ETag>
    <Size>88703</Size>
    <Owner>...</Owner>
    <StorageClass>STANDARD</StorageClass>
    </Contents>
</ListBucketResult>

Я не уверен, является ли это ошибкой, или я что-то здесь упускаю. Я хотел бы знать, как я могу получить предопределенный URL-адрес изображения для отображения в браузере или в виде прямой ссылки на скачивание (используя расположение содержимого, которое тоже не работает) вместо списка ключей корзины. Спасибо!

1 Ответ

1 голос
/ 01 июля 2019

Проверьте переменную keyString .Распечатайте его перед отправкой запроса, чтобы убедиться, что он не нулевой.Единственная разница между get preigned url для одного объекта и get preigned url для перечисления всех объектов заключается в ключе , который вы отправляете в качестве параметра.

Подробнее здесь: https://docs.aws.amazon.com/sdkfornet1/latest/apidocs/html/T_Amazon_S3_Model_GetPreSignedUrlRequest.htm

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