我正在从我的应用程序中捕获/创建用户输入的文本到文件中,试图将它们临时存储在我的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
文件打开代码为:
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是完整路径(但不是字符串)吗?当我把每一个都放出来的时候,它们看起来一模一样。
我想使用File,因为我不想更改我正在上传的现有附件的文件名,而Tempfile会附加到文件名中。
我们非常感谢所有的协助。谢谢
为了使用File,我需要将save_path设置为字符串:
save_path.to_s