Rails:活动存储视频的永久URL

时间:2019-08-27 18:46:52

标签: ruby-on-rails video rails-activestorage

我正在构建一个可离线使用的webapp。
因此,我需要图片和视频的网址都没有过期。
在这种情况下,不会创建ActiveStorage。

因此,我构建了自己的媒体控制器,用于基于URL params

投放图像和视频。
get '/media/:kind/:type/:size/:token'
# /media/video/mp4/middle/ABC123
# /media/image/logo/large/ABC124

有一个带有唯一令牌的MediaObject。使用params,我得到了图像或转换后的视频文件的正确变体,查找了Blob文件的路径,并快速查找了它的文件类型并提供了服务。

path = ActiveStorage::Blob.service.send(:path_for, variant_by(size, type).key)

send_file path, type: content_type, disposition: 'inline'

一切正常,非常好。图片和视频有一个可缓存的(更好看的)永久网址。

现在Safari存在问题。每个浏览器都可以处理控制器返回的mp4 / webm文件。野生动物园除外。无法在浏览器中观看视频。 我猜,标题中缺少某些内容。 但是我找不到活动存储区中提供视频的地方。

当我使用默认方式

# example
Rails.application.routes.url_helpers.url_for(video.mp4)

视频可以内联播放。

我尝试将内容长度添加到响应标头,添加范围信息和状态:partial_content,将文件扩展名添加到url,但是没有任何效果。

哑剧类型正确。

1 个答案:

答案 0 :(得分:0)

Rails 6在storage.yml中引入了Array.map()选项。将其设置为true可覆盖即将过期的URL内容:https://edgeguides.rubyonrails.org/active_storage_overview.html#public-access

此外,如果您仍在使用Rails 5.2,则应该可以使用:

public