Heroku上的Tempfile.new与File.open

时间:2014-04-09 01:26:49

标签: ruby file heroku

我从我的应用程序中捕获/创建用户输入的文本到文件中,尝试将它们临时存储在我的Heroku tmp目录中,然后将它们上传到云端服务,例如Google Drive。

在使用Tempfile时我可以成功上传,但在使用File.open时,我在尝试上传时收到以下错误:

ArgumentError (wrong number of arguments (1 for 0))

错误在于通话:

@client.upload_file_by_folder_id(save_path, @folder_id) 

@client是云服务的会话,save_path是附加文件的上传位置,@ folder_id是他们应该进入的文件夹。

当我使用Tempfile.new时,我成功地这样做了:

    tempfile = Tempfile.new([final_filename, '.txt'], Rails.root.join('tmp','text-temp'))
    tempfile.binmode
    tempfile.write msgbody
    tempfile.close
    save_path = tempfile.path
    upload_file = @client.upload_file_by_folder_id(save_path, @folder_id)
    tempfile.unlink

File.open代码是:

path = 'tmp/text-temp'
filename = "#{final_filename}.txt"
save_path = Rails.root.join(path, filename)      
File.open(save_path, 'wb') do |file|
  file.write(msgbody)
  file.close
end
upload_file = @client.upload_file_by_folder_id(save_path, @folder_id)
File.delete(save_path)

可能是File.path是一个字符串,而Tempfile.path是完整路径(但不是字符串)?当我拿出每个时,它们看起来都是一样的。

我想使用文件,因为我不想更改我上传的现有附件的文件名,而Tempfile会附加到文件名。

非常感谢任何和所有的帮助。谢谢!

1 个答案:

答案 0 :(得分:0)

为了使用File工作,我需要将save_path设置为字符串:

save_path.to_s