如何在看到 "Getting Errno::ENOENT ' no such file or directory @ rb_sysopen'" 时在 Rails 中获取正确的临时文件文件路径
How to get a proper filepath of Tempfile in Rails when seeing "Getting Errno::ENOENT ' no such file or directory @ rb_sysopen'"
我想在我的网站上显示演示文稿文件的预览。我正在尝试制作一个临时文件,该文件从存储在活动存储中的 Microsoft PowerPoint Open XML (.pptx
) 文件中读取。
我在临时文件上使用 Docsplit.extract_images
将幻灯片转换为图像,以便在某种形式的图像轮播中将其显示为预览。
我有幻灯片参数,例如 [:name, :ppt, pages: [] ]
,其中 ppt
是 has_one_attached
,页面是 has_many_attached
。这就是我的 slides_controller 的样子:
def create
@slide = Slide.new(slide_params)
respond_to do |format|
if @slide.save
tempfile = Tempfile.new([ 'foobar', '.pptx'])
tempfile.binmode
begin
@slide.ppt.download { |chunk| tempfile.write(chunk) }
tempfile.flush
tempfile.rewind
ensure
tempfile.close!
end
@slide.pages << Docsplit.extract_images("#{tempfile.path}", :size => '1080x', :format => [:png])
tempfile.unlink
format.html { redirect_to slide_url(@slide), notice: "Slide was successfully created." }
format.json { render :show, status: :created, location: @slide }
else
format.html { render :new, status: :unprocessable_entity }
format.json { render json: @slide.errors, status: :unprocessable_entity }
end
end
end
我遇到 Errno::ENOENT no such file or directory @ rb_sysopen
错误。
这是获取 tempfile
路径的正确方法吗?
此外,如果我使用 tempfile.path
而不是 "#{tempfile.path}"
,我会收到 nil to string 错误。
请确保您使用的是 tempfile.close!这会取消链接每个 https://ruby-doc.org/stdlib-2.5.3/libdoc/tempfile/rdoc/Tempfile.html#method-i-close-21
的文件
如果您只是使用没有爆炸 (!) 的 close,那么您应该已经准备就绪!
我想在我的网站上显示演示文稿文件的预览。我正在尝试制作一个临时文件,该文件从存储在活动存储中的 Microsoft PowerPoint Open XML (.pptx
) 文件中读取。
我在临时文件上使用 Docsplit.extract_images
将幻灯片转换为图像,以便在某种形式的图像轮播中将其显示为预览。
我有幻灯片参数,例如 [:name, :ppt, pages: [] ]
,其中 ppt
是 has_one_attached
,页面是 has_many_attached
。这就是我的 slides_controller 的样子:
def create
@slide = Slide.new(slide_params)
respond_to do |format|
if @slide.save
tempfile = Tempfile.new([ 'foobar', '.pptx'])
tempfile.binmode
begin
@slide.ppt.download { |chunk| tempfile.write(chunk) }
tempfile.flush
tempfile.rewind
ensure
tempfile.close!
end
@slide.pages << Docsplit.extract_images("#{tempfile.path}", :size => '1080x', :format => [:png])
tempfile.unlink
format.html { redirect_to slide_url(@slide), notice: "Slide was successfully created." }
format.json { render :show, status: :created, location: @slide }
else
format.html { render :new, status: :unprocessable_entity }
format.json { render json: @slide.errors, status: :unprocessable_entity }
end
end
end
我遇到 Errno::ENOENT no such file or directory @ rb_sysopen
错误。
这是获取 tempfile
路径的正确方法吗?
此外,如果我使用 tempfile.path
而不是 "#{tempfile.path}"
,我会收到 nil to string 错误。
请确保您使用的是 tempfile.close!这会取消链接每个 https://ruby-doc.org/stdlib-2.5.3/libdoc/tempfile/rdoc/Tempfile.html#method-i-close-21
的文件如果您只是使用没有爆炸 (!) 的 close,那么您应该已经准备就绪!