2014-02-06 98 views
0

我的应用程序允许用户上传图像,然后创建该图像的不同版本(例如与另一图像对齐和裁剪)。中间步骤是我需要将上传的文件复制到另一个对象并进行处理。最简单的方法是在本地上传它。本地文件上传:File.open或StringIO

来自carrierwave wiki,they suggest using a modified version of StringIO

在carreirwave自述,他们也建议使用File.open(类似obj.image=File.open('path_to_file')

我还发现引用使用从ActionDispatch::TestProcess(通常在测试fixture_file_upload,但我不确定它为什么被限制到该环境)。

谁能给我使用这些方法对利弊一个很好的解释(如果有的话)?

感谢。

+0

我不是100%确定stringIO是如何工作的,但是你要非常小心,不要将整个文件加载到内存中,否则你的ruby进程会增加一些非常大的潜在内存增加。 – Kevin

回答

0

我举st发现了一个主要区别,至少在carrierwave的背景下。如果您使用carrierwave将move_to_cache选项设置为true,并将您的上传列设置为File.open,则给File.open的文件将被移动,而StringIO则不会。