2010-03-04 164 views
0

我一直在爲各種解決方案搞點什麼,但我還沒有能夠以令人滿意的方式解決這個問題。在Drupal中處理文件上傳

我希望實現的是某種功能,用戶可以上傳新文件或選擇現有文件重新使用它們。

我到目前爲止使用的是filefield,filefield_sources,imceckeditor模塊的組合。我猜ckeditor對於解決方案並不重要,但我需要能夠以某種方式從檔案中嵌入圖像,並且這是通過IMCE完成的。由於我不希望所有東西都可以通過文件瀏覽器訪問,所以我創建了一個子目錄並在IMCE設置中設置了對它的完全訪問權限,可以稱之爲default/files/site

只要所有文件上傳都是通過IMCE完成的,我直接從文件區上傳文件,我的文件以默認/文件根目錄結束,所以我爲我的字段設置了文件夾,例如default/files/site/movies在允許.flv格式的字段中。只要我沒有嘗試通過IMCE訪問這些文件,這就很好。它看起來由filefield創建的文件夾無法從IMCE訪問?

我也處於一個需要支持大型上傳(200MB +)的位置,但是從我在其他項目中的經驗來看,允許通過FTP上傳文件通常是一種挽救生命的方式,但從我瞭解的IMCE中贏得' t支持文件沒有通過Drupal以某種方式上傳,因爲它們不存在於數據庫中(給出消息:The selected file could not be used because the file does not exist in the database.

我知道我並沒有對我的問題有一個明確的問題,但是不知何故我需要弄清楚這一點非常快。我怎麼會更好地解決這個問題?我知道我不是第一個有這個問題的人,但我還沒有找到一個好的和穩定的解決方案。我錯過了什麼?

回答

0

嗯,我個人並不熟悉IMCE,但如果你需要通過ftp上傳的文件加入到文件表中,那麼我的衝動就是寫一個小的模塊,然後允許用戶點擊一個按鈕並開始批處理。 (這是我假設你使用的是Drupal 6,因爲batch api不存在於5.)

所說的批處理過程然後會遍歷相應目錄中的所有文件,我假設你有上傳文件,使用file_copy()(來自Drupal的文件API)將文件複製到默認/文件/站點,然後將所述文件添加到文件表中,這實際上很簡單,使用drupal_write_record()

它可能甚至不需要使用批處理API - 如果你只是上傳10-30個真正的大文件或200-300 MB文件,它有點問題。

對於使用批處理api,我會看http://drupal.org/node/180528 - 這有一個相當基本的例子,如何批處理api的工作,其基本上是告訴api,你想繼續調用function_a,然後在function_a在上下文數組中設置進度,直到完成爲止,此時批處理完成。然後你只要有誰通過ftp上傳文件來點擊網站上的按鈕來移動和註冊文件。

+0

看起來相當直接的,我要看看它的時候有更多的時間,因爲這可能在執行後期階段,感謝您的建議:) – Marco 2010-03-10 07:44:39