Ruby on rails 允许用户从我的S3存储桶下载图像
我正在尝试构造一种方法,允许用户从我的s3存储桶下载pdf文件(目前确实如此) 但url的某些部分可能会不时更改,例如/timetables之后的id号、文件名(但始终为pdf)和文件名之后的id号 这就是我目前所拥有的Ruby on rails 允许用户从我的S3存储桶下载图像,ruby-on-rails,ruby,amazon-s3,uri,Ruby On Rails,Ruby,Amazon S3,Uri,我正在尝试构造一种方法,允许用户从我的s3存储桶下载pdf文件(目前确实如此) 但url的某些部分可能会不时更改,例如/timetables之后的id号、文件名(但始终为pdf)和文件名之后的id号 这就是我目前所拥有的 def download path = "images/timetables/14/original.pdf?" data = open("http://#{ENV['AWS_BUCKET']}.s3.amazonaws.com/#{path}/1392904333")
def download
path = "images/timetables/14/original.pdf?"
data = open("http://#{ENV['AWS_BUCKET']}.s3.amazonaws.com/#{path}/1392904333")
send_data data.read, filename: 'Timetable',
type: 'application/pdf',
disposition: 'attachment',
stream: 'true',
buffer_size: '4096'
end
有没有办法在飞行中获取这些信息,或者我只能硬编码?理想情况下,我希望尽可能多地将路径存储到变量中
有谁能告诉我如何正确地做这件事吗
谢谢使用它可以更轻松地管理上传。使用此选项,您将创建一个表来保存一条记录,该记录将动态引用您上传的文件
工作流程如下所示:
class PdfRecord < ActiveRecord::Base
has_attached_file :pdf, :storage => :s3,
:bucket => 'S3_BUCKET_NAME',
:s3_credentials => {
:access_key_id => 'AWS_ACCESS_KEY_ID',
:secret_access_key => 'AWS_SECRET_ACCESS_KEY'
}
end
@pdf_record = PdfRecord.find(which ever one you want)
@pdf_record.pdf.url # => the S3 url
- 您将有问题的PDF上载到应用程序
- 回形针将其上传到S3并将URL保存到数据库中
- 您提供了一个指向用户的链接,以获取PDF的S3URL
- 或者你给他们你的记录的链接,然后你开始下载你上面发布的内容
class PdfRecord < ActiveRecord::Base
has_attached_file :pdf, :storage => :s3,
:bucket => 'S3_BUCKET_NAME',
:s3_credentials => {
:access_key_id => 'AWS_ACCESS_KEY_ID',
:secret_access_key => 'AWS_SECRET_ACCESS_KEY'
}
end
@pdf_record = PdfRecord.find(which ever one you want)
@pdf_record.pdf.url # => the S3 url
向用户提供该url将允许他们直接下载pdf。但是,如果您想隐藏url并允许您在不中断链接的情况下更新pdf,则可以向用户提供指向pdf\u记录的链接,然后从控制器开始下载:
# give your users this url, as defined in your routes.rb
pdf_record_url(@pdf_record)
def show
pdf_record = PdfRecord.find(params[:id])
data = open(pdf_record.pdf.url)
send_data data.read, filename: pdf_record.pdf_file_name,
type: pdf_record.pdf_content_type,
disposition: 'attachment',
stream: 'true',
buffer_size: '4096'
end
然后在pdf_记录控制器的显示操作中:
# give your users this url, as defined in your routes.rb
pdf_record_url(@pdf_record)
def show
pdf_record = PdfRecord.find(params[:id])
data = open(pdf_record.pdf.url)
send_data data.read, filename: pdf_record.pdf_file_name,
type: pdf_record.pdf_content_type,
disposition: 'attachment',
stream: 'true',
buffer_size: '4096'
end
现在,您可以随时更新该pdf\u记录
,因为您的用户有一个指向该记录的链接,而不是实际的pdf文件,所以该链接将始终有效。您能再次解释一下这个问题吗?为什么文件名会改变?是什么触发了这种变化?是否只更改名称或内容?这是一个安全功能吗?谢谢你这么深入的回答,我已经在用回形针了,所以我稍后会试试