2012-11-25 72 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我編輯了我的答案與一些更多的細節。 「 –