Rails 重命名临时文件

Rails Rename tempfile

我正在使用 roo-rb 访问上传的文件。我的代码是这样的:

s = Roo::Excelx.new(params[:upload][:file].tempfile.path)

但我遇到了问题,因为生成的临时文件没有扩展名,我遇到了这个异常:

.../AppData/Local/Temp/RackMultipart20150216-10192-13yn50s is not an Excel-xlsx file

有没有办法重命名 tempfile.path 以使其具有适当的扩展名 (xlsx)?或者有没有更优雅的方法来解决这个问题?

我已经使用 fileutils 成功地重命名了一个临时文件(即使部署在 Heroku 上)。这是代码:

require 'roo'
require 'fileutils'

tmp = params[:upload][:file].tempfile
file = File.join("public", params[:upload][:file].original_filename)
FileUtils.cp tmp.path, file

s = Roo::Excelx.new(file)

Or is there a more elegant way to solve this problem?

是的,你可以specify the extension

s = Roo::Spreadsheet.open(
  params[:upload][:file].tempfile.path,
  extension: :xlsx
)