首页 > 解决方案 > Ruby on Rails 下载 S3 视频文件

问题描述

想要下载 S3 签名视频文件...但不是下载它去播放...

使用 send_data S3 下载

send_data open(file).read, filename: 'archive12.mp4', type: 'video/mp4', disposition: 'attachment'

视频文件=“ https://s3-eu-west-1.amazonaws.com/tokboxhub.mangoapps.com/46250362/2e1ad9d5-8240-41d2-82bc-38c34bf92e7e/archive.mp4?X-Amz-Algorithm=AWS4- HMAC-SHA256&X-Amz-Credential=AKIAJCPWVPHOCSAJPE5A%2F20190117%2Feu-west-1%2Fs3%2Faws4_request&X-Amz-Date=20190117T181610Z&X-Amz-Expires=9000&X-Amz-SignedHeaders=host&X-Amz-Signature=a26d991341b5349f1f1e3afb820883b2187bc6151f395506add87cc78daa15ff "

标签: ruby-on-railsrubyamazon-s3

解决方案


您正在使用open(file).read. 因此它读取文件并播放它。也许删除.read. 尝试添加stream标志。也请看send_filehttps ://api.rubyonrails.org/classes/ActionController/DataStreaming.html#method-i-send_file 。

或者使用 aws-sdk 也许?

require 'aws-sdk'

s3 = Aws::S3::Resource.new(
region: 'us-east-1',
access_key_id: '...',
secret_access_key: '...'
)

s3.bucket('bucket-name').object('key').get(response_target: '/path/to/file')

如果您仍想使用send_data,不妨试试:

data = open("https://s3.amazonaws.com/PATTH TO YOUR FILE") 
send_data data.read, filename: 'archive12.mp4', stream: false, type: 'video/mp4', disposition: 'attachment'

推荐阅读