Ruby on Rails中处理多文件上传的最佳方法

3
我曾在这里提出过类似的问题,但没有得到有效的答案: Uploadify + Paperclip + Rails nested association before_save 现在我重新阐述我的问题:
在Rails中,最佳的方法是什么,可以一次上传多个文件并将它们关联到尚未保存的对象上?(例如一个模型(女孩)应用程序表单,在完成创建操作时保存到数据库中(按下保存按钮))
有很多想法浮现在我脑海中(在上传图像之前通过ajax保存对象,为图像添加令牌,然后在保存模型对象后添加模型ID),但我相信许多人都已经做过这个,并且有一种常见的方法或最佳途径来实现它。
提前谢谢! 马丁。
2个回答

3

我在我的一个Rails 3应用程序中使用了这个:

= form_for :import_csv, :url => {:action => :import_csv}, :html => {:multipart => true} do |f|
  = f.file_field :csv
  = f.submit 'Upload CSV'

这将创建一个临时文件,可以使用以下方式检索:

CSV.open(params[:import_csv][:csv].tempfile.path)

我认为这样的方法可以扩展到多个上传,并且可以通过 params[:import_csv][:whatever] 访问。
注意:在Rails 3.0.3中,处理临时文件的方式略有改变,因此上面的代码使用了 .tempfile.path,而在之前的版本中则不需要。

0

一年多以前,我遇到了类似的问题,但找不到现成的解决方案,因此采取了以下措施:
1.使用SWFUpload上传图像到“store_image”操作,该操作存储、调整大小等,并返回缩略图的路径和已上传图像的ID。
2. 使用JS将图像ID放入隐藏字段值中。我使用单个字段,其值类似于“2312111:3231231:323212”。
3. 创建“主”对象时,通过其ID查找已上传的图像,并与主题建立关系。

此外,垃圾收集器会删除三天前创建的无关图像。垃圾收集器每天都会由cron运行。

对我来说,这是最优雅的解决方案。

__
对我的糟糕英语表示抱歉


但是仅仅将ID隐藏在页面上不安全,用户不可能写其他的ID吗? - Martin
我在管理面板中使用此解决方案,因此安全问题并不是关键。为了增加安全性,您可以使用GUID作为图像的标识符,限制图像数量并使用正则表达式检查字段中的冒号数。您还可以检查“新”图像的关系是否已经设置,如果是,则抛出错误。还有许多其他增加安全性的机会,例如您可以设置图像的所有权,或使用会话存储已上传图像的ID(但对我来说,最后一个解决方案非常丑陋)。 - Beer Brother

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接