我们上传文件时位于临时文件夹的位置

时间:2014-04-15 14:37:20

标签: ruby-on-rails ruby

我正在编写Ruby-on-Rails应用程序,它将记录存储在db表中(记录数不超过200行)。每条记录都与jpeg / png图像或图标相关联(最大尺寸为32x32)。因此,我的应用必须上传并将图像保存在特定文件夹中的服务器上。

在文档中它说“params散列中的对象是IO的子类的实例。根据上传文件的大小,它实际上可能是一个StringIO或由临时文件支持的File实例。 ”

我的问题:这个临时文件夹位于服务器上的哪个位置?它是依赖于系统还是依赖于应用程序?

1 个答案:

答案 0 :(得分:1)

tempfile的位置可能与系统有关,可能位于/tmp文件夹中。

但你真的不需要知道。

上传的图像作为StringIO对象存储在内存中,或保存到主机服务器上的临时文件中。这是rails提供的优化。如果图像足够小,Rails会传递一个StringIO对象,它基本上是内存中加载的整个图像。如果图像较大,它将传递一个表示磁盘上临时文件的实例。

您只想将其保存到已知文件夹,例如uploads。您无需关心图像是存储在内存中还是存储在磁盘上。

StringIO对象和临时文件支持的对象都响应:read方法。您所要做的就是调用read来获取数据,然后将其写出到您想要的位置。

image_as_io = params[:image]
filename = ... # determine a filename for the image

File.open(Rails.root.join('public', 'uploads', filename), 'wb') do |file|
  file.write(image_as_io.read)
end