我对rails很新,但我之前已经完成了文件上传。我正在尝试实现非常基本的文件上传 - 没什么特别的,只需上传文件,保存并记录下来。所以这是保存文件的方法:
def self.save(upload,name)
directory='public/uploads'
ext=File.extname(upload.original_filename)
path=File.join(directory, "#{name}#{ext}")
File.open(path,'wb') { |f| f.write(upload.read) }
end
该文件显然有效,因为extname()获得了正确的扩展名。新文件在正确的位置创建。但不知何故,写作失败,因为文件总是空的。无论我使用什么类型的文件。怎么可能出错?如果重要的话,我正在使用Rails 3.0。
答案 0 :(得分:1)
尝试File.open(path,'wb') { |f| f.write(upload.read); f.close }
IO缓冲区可能没有刷新,但关闭文件应该刷新它。
另外,我强烈建议使用paperclip这样的插件进行文件上传,因为文件上传可能很难管理,而paperclip提供了一种很好的方式将大部分内容抽象为约定,所以你可以只添加几列并执行model.upload = params[:file]
。