相关疑难解决方法(0)

在Ruby on Rails中,在send_file方法之后从服务器中删除该文件

我使用以下代码在Rails中发送文件.

if File.exist?(file_path)
  send_file(file_path, type: 'text/excel') 
  File.delete(file_path)
end

在这里,我试图发送文件,并在成功发送后从服务器中删除该文件.但我面临的问题是,删除操作是在发送执行时执行的,因为我在浏览器中看不到任何内容.

所以在Rails中有任何方法,一旦send_file操作完成,从服务器删除文件.

任何有关这方面的帮助将受到高度赞赏.

谢谢,
Chetan

ruby ruby-on-rails file x-sendfile

30
推荐指数
2
解决办法
1万
查看次数

rails - x-sendfile +临时文件

前段时间我写了一个关于在rails应用程序中使用临时文件的问题.在特定情况下,我决定使用tempfile

如果我还想使用该x-sendfile指令(作为Rails 2中的参数,或作为Rails 3中的配置选项),这会导致问题,因此文件发送由我的Web服务器直接处理,而不是我的rails应用程序.

所以我想做这样的事情:

require 'tempfile'

def foo()
  # creates a temporary file in tmp/
  Tempfile.open('prefix', "#{Rails.root}/tmp") do |f|
    f.print('a temp message')
    f.flush
    send_file(f.path, :x_sendfile => true) # send_file f.path in rails 3
  end
end
Run Code Online (Sandbox Code Playgroud)

此设置有一个问题:文件在发送之前被删除!

一方面,tempfile一旦Tempfile.open块结束就会删除文件.另一方面,x-sendfile使send_file调用异步 - 它返回非常快,因此服务器几乎没有时间发送文件.

我现在最好的解决方案是使用非临时文件(File而不是Tempfile),然后是定期擦除temp文件夹的cron任务.这有点不优雅,因为:

  • 我必须使用自己的临时文件命名方案
  • 文件在tmp文件夹上停留的时间比需要的时间长.

有更好的设置吗?或者,异步上至少有一个"成功"回调send_file,所以我可以在完成后删除f吗?

非常感谢.

ruby ruby-on-rails x-sendfile temporary-files

8
推荐指数
1
解决办法
4795
查看次数

标签 统计

ruby ×2

ruby-on-rails ×2

x-sendfile ×2

file ×1

temporary-files ×1