Rails Ckeditor S3 URL загруженного изображения истекает через некоторое время - PullRequest
0 голосов
/ 26 июня 2018

Я разрабатываю функцию публикации, где пользователь может создавать новые публикации, используя CKEditor в Rails. Изображение загружено на S3 с использованием carrierwave.

Я заметил проблему с тем, что хранилище URL изображений в базе данных выглядит примерно так "https://somebucket.s3.amazonaws.com/freight/ckeditor/pictures/11/content_logos1_0000_Singapore-Logistics-Association.jpg?X-Amz-Expires=600&X-Amz-Date=20180626T094950Z&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAIJ2MY37H6GCRA66Q/20180626/us-east-1/s3/aws4_request&X-Amz-SignedHeaders=host&X-Amz-Signature=072ca2de6c07d8388c1ac338b110c05fba39329b9a8155689bfe040c555993e1"

Срок действия этого URL истек. И через минуту пост больше не будет отображать изображение.

Есть ли способ решить эту проблему?

ОБНОВЛЕНИЕ: найдено решение для этого:

  • Сделать папку S3 общедоступной
  • Добавьте этот код в класс S3 Image Uploader, чтобы он генерировал общедоступный URL-адрес вместо предварительно назначенного.

    класс CkeditorPictureUploader

Ответы [ 2 ]

0 голосов
/ 03 октября 2018

Вы должны установить время истечения в загрузчике картинок

class CkeditorPictureUploader < CarrierWave::Uploader::Base
          # rest of your code
          # public all images

          def fog_public
            true
          end


 end
0 голосов
/ 26 июня 2018

URL истекает через минуту, потому что это presigned-url , который предназначен для истечения срока действия через определенный промежуток времени, они используются для короткого доступа к закрытым файлам в корзине s3 продолжительность времени.

Если вы хотите получить более длинный доступ к URL-адресу, вы можете увеличить время создания URL-адреса с помощью своего кода или, если в сценарии использования ваш объект должен быть общедоступным, вы можете вместо этого сделать его общедоступным, а затем использовать это размещенный на s3 URL, указывающий на этот объект.

import boto3
s3Client = boto3.client('s3')
s3Client.generate_presigned_url('get_object', Params = {'Bucket': 'www.mybucket.com', 'Key': 'hello.txt'}, ExpiresIn = 100)

Это пример в python, который генерирует предопределенный URL, срок действия которого истекает через 100 секунд

...