2012-11-25 41 views
0

我正在开发一个表单,我希望允许用户上传文件或将url输入到现有文件。Rails:上传文件或存储url

这个想法是允许用户将各种'多媒体'文件附加到条目,其中一些可能是来自其硬盘驱动器(想象图像,文字文档等)的文件,一些可能是网址(youtube videos,images on flickr等)

关于如何完成此任何想法?我目前使用carrierwave来处理文件上传,它似乎运作良好,但我也想存储网址。

回答

2

我可能会做的是在文件上传表单中有一个下拉菜单,以选择文件是从磁盘还是从外部URL。

默认情况下,它将设置为“从磁盘”,如果他们选择外部URL,您可以使用一些AJAX魔术并隐藏文件上传文本框并使用文本框来使用外部url /脚本等。

在表中,你可以保持其他两列,

1 - 通过这种方式,你可以区分的文件和文件类别(外部/上传文件)

- 外部URL

2他们如何在视图中显示

HTH

+0

这可能是我最终会做的。我只是想知道是否有一个神奇的宝石在那里处理它;) – bstamour

+0

@bstamour,很高兴它的帮助,据我所知没有魔术宝石,但你可以试试它:) – sameera207

1

不要保存网址,除非你真的有。问题是,当你保存一个url时,你不能处理它来创建一个缩略图或多个样式的图像。此外,当您在一个页面中显示图像时,您将不得不进行外部呼叫,这可能会减慢页面速度,甚至更糟,如果链接在未来某个时候会中断,用户将看到空白图像。

youtube视频也是这种情况。但是,对于通常想要存储并显示更多信息的视频,不仅仅是视频。你可以有两个表格 - 一个用于视频,另一个用于图像。在视频表中你有标题,desc,作者,持续时间,嵌入代码,缩略图(图像附件)。

你可以下载任何图像,当一个URL给出并保存它像一个普通的文件。 使用carrierwave -

@object.remote_image_url = "http://www.foo.com/file.png" 
@object.save 

在视图中,你将有两种选择,也许并排,你可以让他们张贴到不同的操作。所以如果文件被选中并发布,你可以正常保存。如果输入了网址,那么您可以检查它是否是视频网站 - 如果是视频,请使用video_info gem解析出信息并将其存储。否则,只需使用上面的两行并保存url图像。

注意

我的回答并没有讨论的用户输入的质量/特性。在我看来,输入不正确网址的人很可能是高的,所以你想包装尝试将url保存为开始 - 救援块中的图像,并且可能使用JS将视频域限制为只有几个网站将能够解析。

+0

这是对图像的情况很好的建议,但YouTube视频等呢? – bstamour

+0

@bstamour视频不是图像:)无论如何,您应该为视频保留一组单独的列甚至不同的表格。检出https:// github。com/thibaudgg/video_info它会解析一个Vimeo或Youtube的网址,并返回像标题,desc,缩略图,嵌入代码等,然后你可以存储在数据库中 –

+0

@bstamour我编辑了我的答案与一些更多的细节。 “ –