我将文件存储移动到Rackspace Cloudfiles,它破坏了我的send_file操作。
def full_res_download
@asset = Asset.find(params[:id])
@file = "#{Rails.root}/public#{@asset.full_res}"
send_file @file
end
def full_res_download
@asset = Asset.find(params[:id])
@file = "http://86e.r54.cf1.rackcdn.com/uploads/fake/filepath.mov"
send_file @file
end
当文件在公共文件中时。代码工作得很好。当您单击链接时,文件将下载并且网页不会更改。现在它给出了这个错误。
Cannot read file http://86e.r54.cf1.rackcdn.com/uploads/fake/filepath.mov
我缺少什么?
非常感谢您的时间。
答案 0 :(得分:2)
send_file
打开一个本地文件,并使用机架中间件发送它。您应该重定向到网址,因为您不再托管该文件。
正如其中一条评论指出的那样,在某些情况下,由于各种原因,您可能无法使用重定向。如果是这种情况,则必须下载该文件并在检索后将其转发回用户。这样做的结果是转移给用户将执行以下操作:
与重定向的情况相比:
在这两种情况下,用户都必须等待两个完整的连接,但是您的服务器已经保存了一些工作。因此,在环境允许的情况下使用重定向会更有效。
答案 1 :(得分:2)
def full_res_download
@asset = Asset.find(params[:id])
@file = open("http://86e.r54.cf1.rackcdn.com/uploads/fake/filepath.mov")
send_file( @file, :filename => File.basename(@asset.file.path.to_s))
end
controler.rb
def web_video_download
@asset = Asset.find(params[:id])
@file = open(CDNURL + @asset.video_file.path.to_s)
send_file( @file, :filename => File.basename(@asset.video_file.path.to_s))
end
development.rb
CDNURL = "http://86e.r54.cf1.rackcdn.com/"