Rails Ckeditor S3上传的图像URL会在一段时间后过期

时间:2018-06-26 10:06:42

标签: ruby-on-rails amazon-s3 ckeditor carrierwave

我正在开发一种发布功能,用户可以在Rails中使用CKEditor创建新帖子。图片是使用载波上传到S3的。

我注意到一个问题,即数据库中的图像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,而不是预先签名的URL。

    CkeditorPictureUploader类

2 个答案:

答案 0 :(得分:0)

该网址将在一分钟后过期,因为这是一个 presigned-url ,它是指在特定时间间隔后过期,它们用于访问s3存储桶中的私有文件时间短。

如果您希望访问该URL的时间更长,则可以延长通过代码生成URL的时间,或者如果用例希望您的对象可被所有人公开访问,则可以改为公开您的对象,然后使用是s3托管网址指向该对象。

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

这是python中的一个示例,该示例生成一个预签名的url,该URL在100秒后失效

答案 1 :(得分:0)

您应该在图片上传器中设置到期时间

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

          def fog_public
            true
          end


 end