Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Rails:上传文件或存储url_Ruby On Rails_Ruby - Fatal编程技术网

Ruby on rails Rails:上传文件或存储url

Ruby on rails Rails:上传文件或存储url,ruby-on-rails,ruby,Ruby On Rails,Ruby,我正在开发一个表单,允许用户上传文件或输入现有文件的url 其想法是允许用户将各种“多媒体”文件附加到条目上,其中一些可能是来自硬盘的文件(想想图像、word文档等),另一些可能是URL(youtube视频、flickr上的图像等) 关于我如何做到这一点有什么想法吗?我目前正在使用carrierwave来处理文件上传,它似乎工作得很好,但我也想存储url。除非你真的保存了url,否则不要保存url。问题是,当你保存一个url时,你不能处理它来创建一个缩略图或多种样式的图像。此外,当您在页面中显示

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

其想法是允许用户将各种“多媒体”文件附加到条目上,其中一些可能是来自硬盘的文件(想想图像、word文档等),另一些可能是URL(youtube视频、flickr上的图像等)


关于我如何做到这一点有什么想法吗?我目前正在使用carrierwave来处理文件上传,它似乎工作得很好,但我也想存储url。

除非你真的保存了url,否则不要保存url。问题是,当你保存一个url时,你不能处理它来创建一个缩略图或多种样式的图像。此外,当您在页面中显示图像时,您必须进行外部调用,这可能会降低页面速度,甚至更糟,如果将来某个时候链接中断,您的用户将看到一个空图像

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

您可以在给定URL时下载任何图像,并将其像普通文件一样保存。 使用载波波-

@object.remote_image_url = "http://www.foo.com/file.png"
@object.save
在视图中,您可能同时拥有这两个选项,并且您可以让它们发布到不同的操作。因此,如果选择并发布了一个文件,您可以正常保存它。如果输入了一个url,那么您可以检查它是否是一个视频站点-如果是视频,请使用video_info gem解析信息并存储它。否则,只需使用上面的两行并保存url图像

注意


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

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

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

您可以在给定URL时下载任何图像,并将其像普通文件一样保存。 使用载波波-

@object.remote_image_url = "http://www.foo.com/file.png"
@object.save
在视图中,您可能同时拥有这两个选项,并且您可以让它们发布到不同的操作。因此,如果选择并发布了一个文件,您可以正常保存它。如果输入了一个url,那么您可以检查它是否是一个视频站点-如果是视频,请使用video_info gem解析信息并存储它。否则,只需使用上面的两行并保存url图像

注意


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

我可能要做的是在文件上载表单中设置一个下拉列表,以选择文件是来自磁盘还是来自外部url

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

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

1-外部url

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

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


HTH

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

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

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

1-外部url

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

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


HTH

对于图像来说,这是一个很好的建议,但是youtube视频和类似的视频呢?@b视频不是图像:)无论如何,你应该为视频保留一组单独的列,甚至是一个不同的表。检查它将解析Vimeo或Youtube url,并返回诸如标题、描述、缩略图、嵌入代码等内容,然后您可以将这些内容存储在数据库中“问题是,当您保存url时,您无法对其进行处理以创建图像的缩略图或多种样式。”当然可以。您可以运行后台进程来卷曲图像并对其进行处理。Carrierwave可以这样做(我假设回形针也可以)。@tadiou我的意思是不需要将URL保存到数据库。回形针在图像上异步运行进程,carrierwave也是如此。所有这些都意味着,一旦保存记录,原始URL值就没有什么价值,理想情况下不应该在应用程序中的任何其他地方引用。此外,除非容量非常大,否则滚动您自己的bckgrnd que会有问题-如果url中断/站点关闭/该地址的图像发生更改,等等。除非您知道保存卷曲后多久会运行。对于图像,这是一个很好的建议,但youtube视频等呢?@bstamour视频不是imag