RoR:检查上传的文件

时间:2009-08-25 18:58:57

标签: ruby-on-rails

我需要在上传文件保存到文件系统之前检查它们的位。 PHP的文档有一个很好的页面,告诉我我可以使用哪些属性(http://us3.php.net/manual/en/features.file-upload.post-method.php),但我找不到类似于Ruby和/或Rails的东西。

我还尝试记录上传的JSON格式的字符串,但这只会给我一个冗余的UTF-8错误。我想不出任何其他的尝试。

任何人都可以提供任何见解或指引我到正确的地方吗?

感谢。

更新:我在OS X(Leopard)上运行Apache 2.2.11,以防Peter正确(见下文)。

更新:如果有帮助,我的输入参数会记录为"upload"=>#<File:/tmp/RackMultipart.64239.1>。我只是不确定如何访问它以获得它的“部分”。

4 个答案:

答案 0 :(得分:4)

据我所知,在读取上传之前,没有物理文件。这与derfred的回复是一致的。 可以访问的唯一元数据是:

uploaded_file.content_type  # the uploaded file's MIME type
uploaded_file.original_path # which is really just the name of the file

此外,read上有一个uploaded_file方法,允许访问文件'内容,并且可能会写入永久文件系统。

我注意到的另一件事是 only 意味着Ruby提供检查文件的MIME类型是在上传文件的这个content_type属性中。一旦文件在文件系统上,就不再有任何方式来访问或确定MIME类型。

答案 1 :(得分:0)

我认为这取决于您使用的网络服务器。我记得有mongrel,apache和nginx的不同领域。

答案 2 :(得分:0)

AFAIK Rails和各种应用服务器完全抽象了上传部分。但是这里是对该主题的全面讨论: http://www.jedi.be/blog/2009/04/10/rails-and-large-large-file-uploads-looking-at-the-alternatives/

答案 3 :(得分:0)

这只是一个File对象,可以通过以下方式复制:

File.open("some_file")

/tmp/RackMultipart.64239.1 只是一个文件名。

如果要从控制器中查看/输出其内容:

 puts params[:upload].read