我用的是 ubuntu 11.10 server
记得 @huacnlee 说很慢
好东西,多谢分享。
#7 楼 @zhangyuan 谢谢解答,让你这样一说,还真有可能是某个 Gem 引起的,我挨个去掉测试一下
#4 楼 @zhangyuan 但新建一个项目就没这个 WARNING 提示
#4 楼 @zhangyuan 不好意思,现在帖出来了,不过这行内容和新建一个项目的内容一样,不知道为什么会这样
啥时候能更新到 rubygems.org 上。。
同问,貌似我从未收入 ruby-china 的邮件。。
已解决,我的代码如下:
ApplicationController 里写了个 download_file 方法,便于重用:(处理方法和 GridfsController 里的 serve 方法一致,只是用 send_file_headers 来处理了一下文件名)
def download_file(path)
gridfs_path = path.gsub("/uploads/", "uploads/")
begin
options = {:filename => File.basename(path)}
send_file_headers! options
gridfs_file = Mongo::GridFileSystem.new(Mongoid.database).open(gridfs_path, 'r')
self.response_body = gridfs_file.read
self.content_type = gridfs_file.content_type
rescue Exception => e
self.status = :file_not_found
Rails.logger.debug { "#{e}" }
self.content_type = 'text/plain'
self.response_body = 'file not found'
raise e
end
end
然后就是 VideosController 里的 download 方法来调用 download_file:
def download
@video = Video.find(params[:id])
if @video.blank?
render_404
end
# send_file @video.file_url, :type => 'application/octet-stream', :disposition => 'attachment'
@video.download = @video.download + 1
@video.save
download_file(@video.file_url)
end
view 里:
<%= link_to "下载", { :action => "download", :id => @video.id } %>
把 GridfsController 里的处理方法写进 download 试试。
在 stackoverflow 上找到一个问题和我几乎一样,但没有被解决。。。
http://stackoverflow.com/questions/8558285/carrierwave-fogs3-letting-the-users-to-download-the-file
#3 楼 @quakewang #4 楼 @bony 好,我来试试
我没学过 go 语言,不过这里有个 pdf 看起来挺不错的,不知道你有没有看过。 http://notedit-code.googlecode.com/files/go.pdf
祝学有所成,多来分享心得。:)
好东西,谢谢分享。
改成你的 ruby-china 代码所在路径就是了 比如我放在 /var/workspace/ruby-china
服务器用的盛大云吗?速度不错。
找到了 model.file.length
在这里找到的 http://rubydoc.info/github/jnicklas/carrierwave/frames CarrierWave -> Uploader -> Base -> Method Summary
感谢分享。