【发布时间】:2020-10-04 11:40:18
【问题描述】:
我有一个简单的单页可搜索 PDF,它使用 Active Storage 上传到 Rails 6 应用程序模型(汽车)。我可以使用 Rails 控制台中的“tempfile”和“pdf-reader”gem 从 PDF 中提取文本:
> @car.creport.attached?
=> true
> f = Tempfile.new(['file', '.pdf'])
> f.binmode
> f.write(@car.creport.blob.download)
> r = PDF::Reader.new(f.path.to_s)
> r.pages[1].text
=> "Welcome to the ABC Car Report for January 16, 20...
但是,如果我在我的 cars_controller.rb 的 create 方法中尝试同样的事情,它就不起作用:
# cars_controller.rb
...
def create
@car = Car.new(car_params)
@car.filetext = ""
f = Tempfile.new(['file', '.pdf'])
f.binmode
f.write(@car.creport.blob.download)
r = PDF::Reader.new(f.path.to_s)
@car.filetext = r.pages[1].text
...
end
当我运行 Rails 应用程序时,我可以创建一个新 Car 并选择要附加的 PDF 文件。但是,当我单击“提交”时,我在 car_controller.rb 的 f.write() 行中收到 FileNotFoundError。
我的直觉是控制器试图读取 blob 以便过早将其写入临时文件(即,在 blob 甚至还没有被写入之前)。我尝试插入 sleep(2) 给它时间,但我得到了相同的 FileNotFoundError。
有什么想法吗?
谢谢!
【问题讨论】:
标签: ruby-on-rails ruby pdf rails-activestorage pdf-reader