0

我正在开发一个表单,我希望允许用户上传文件或输入现有文件的 url。

这个想法是允许用户将各种“多媒体”文件附加到条目中,其中一些可能是来自他们的硬盘驱动器的文件(想想图像、word 文档等),还有一些可能是 url(youtube 视频、flickr 上的图像等)

关于我如何做到这一点的任何想法?我目前正在使用carrierwave来处理文件上传,它似乎运作良好,但我也想存储url。

4

2 回答 2

2

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

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

在表格中,您可以保留另外两列,

1 - 外部网址

2 - 文件类别(外部/上传文件)

通过这种方式,您可以区分文件以及它们如何在视图中显示

高温高压

于 2012-11-25T08:06:59.047 回答
1

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

youtube 视频也是如此。但是,对于视频,您通常希望存储和显示的信息不仅仅是视频。您可以有两张桌子 - 一张用于视频,一张用于图像。在视频表中,您有标题、说明、作者、持续时间、嵌入代码、缩略图(图像附件)。

给出 URL 后,您可以下载任何图像并将其保存为普通文件。使用载波 -

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

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

笔记

我的回答没有讨论用户输入的质量/性质。在我看来,有人输入错误 url 的可能性很高,因此您希望将尝试将 url 作为图像保存在 begin-rescue 块中,并且可能使用 JS 将视频域限制为您可以访问的几个网站将能够解析。

于 2012-11-25T02:33:36.923 回答