Upload_ch

模組介紹: 

檔案上傳時,使用序列化數字作為檔名儲存實際檔案
並將中文檔名存入資料庫
於下載檔案時透過檔案ID對應,將下載的檔案重新命名回中文檔名
避免中文檔名在程式處理以及伺服器端儲存的問題
實體檔案位址將會在 files 資料夾內另開一個 node_attach 資料夾來存放,避免序列化的檔名與 files 內的檔案同名

另外
由於 6.x 取消 db_next_id() 函式
而代替的 db_last_insert_id() 函式實際上為抓取資料表欄位的 auto_increment 值
無法用來作為單純的計數器
所以另外開發用來作為計數器的 api 模組 => sequence
使用 upload_ch 模組時必須搭配 sequence

ps1. 僅修正內容(node)附加檔案的上傳與下載的中文檔名
ps2. 檔案下載設定新增選項,啟用後會在下載路徑尾端附加中文檔名,提高路徑的可讀性
ps3. 模組內已經附上翻譯檔
ps4. 下載時會將檔名編碼為 big5,所以多語環境下不適用,編碼可以在 variable 資料表設定 upload_ch_charset 的值來變更

附加檔案大小
sequence-6.x-0.1-dev.zip2.11 KB
upload_ch-5.x-1.0.zip4.1 KB
upload_ch-6.x-0.2-dev.zip5.53 KB
upload_ch_itweak-6.x-0.1-dev.zip1.97 KB

回應

nobody1225 的照片

Re: Upload_ch

哇感謝
可以用在CCK的file嗎

hom 的照片

Re: Upload_ch

cck 的 file field 功能是獨立的
這部份需要另外改寫才行
我會找時間研究 file field 的程式
再來看要怎麼改寫

hanamizuki 的照片

Re: Upload_ch

這東西真的是很多人需要!

有submit到Drupal.org嗎?

hom 的照片

Re: Upload_ch

submit到Drupal.org要怎麼弄我還不清楚 囧

doz 的照片

Re: Upload_ch

hi hom
謝謝你開發這個模組,超好用

不過,我遇到一個情況
啟用下載路徑尾端附加中文檔名
在 內容節點是正常的,下載時可以看到中文檔名
但是在Teaser view的模式下顯示附件檔案清單時,還是顯示數字ID,而非中文檔名
希望有機會能請你修補這個問題,超級感謝!!
我是用6.x版 win xp環境

hom 的照片

Re: Upload_ch

可以請問一下 Teaser view 部份的設置嗎
是否可以提供畫面方便我參考

doz 的照片

Re: Upload_ch

感謝回覆

我是在content type的Attachments display中設定teaser view
設定如附檔

是用simple view產生的content list
網站網址 http://www.tpeea.org.tw 請參考最新消息的下載檔
看起來是中文檔名,點閱下載時跳出來的link是數字ID

附加檔案大小
teaserview.jpg52.21 KB
hom 的照片

Re: Upload_ch

檢查的結果
其實是受到 itweak_upload 這個模組的功能影響

請先更新 upload_ch-6.x-0.2-dev.zip
然後下載並啟用 upload_ch_itweak-6.x-0.1-dev.zip

doz 的照片

Re: Upload_ch

喔耶,非常感謝...

shime 的照片

Re: Upload_ch

非常棒的模組
而且也學到hook_menu_alter的用法與時機

另外,剛在測試此模組時,發現個小問題

部分檔案類型(txt、pdf)以及下載檔案時,出現下載視窗後再取消下載然後再點下載,都會被加入drupal_not_found()的內容
測試環境是 FF 3.5.5 與 IE8 皆在 Win 7,跑本機localhost
使用upload_ch-6.x-0.2-dev.zip版本

後來發現可能是upload_ch.module的79行,不管上方執行如何,皆會return drupal_not_found()
我將它修改為

78: }else{
79:   return drupal_not_found();
80: }

就比較正常了,不曉得這樣的修正是否恰當..

shime 的照片

Re: Upload_ch

剛看了原始upload模組中的file_download() 是沒有加入else{ .... }
而是在file_transfer()的最終加exit();
我想應該兩種都可以吧

vincnet0228@drupaltaiwan.org 的照片

Re: Upload_ch

前輩您好:我看到你這個模組出Drupal 6的版本了,所以就花了好幾天的時間去研究如何從D5升級到D6

目前是升級成功了,但出了一些問題,可能又要麻煩前輩你出手了 @@

圖片1:升級之後去點選升級之前所發的公告,其附件在下載時只會出現編號
圖片2:升級之後所發的測試公告,點選其附件一切正常

老樣子...IE 6 XP2

附加檔案大小
02.jpg43.36 KB
01.jpg42.66 KB
hom 的照片

Re: Upload_ch

因為 5.x 和 6.x 在檔案資料儲存的處理上不太一樣
所以在資料庫儲存中文檔名的方式也跟著不同
目前 6.x 版的安裝檔裡面還沒有加上升級程式
所以並沒有把 5.x 版本的資料轉成 6.x 版本

以下先提供手動更新的方法
1. 開啟 phpmyadmin
2. 備份 files 資料表
註:如果 5.x 版上傳檔案很多,怕之後檢查時忘記
可以執行 SELECT * FROM files AS f INNER JOIN files_ch_name AS c ON f.filename = c.cnid SQL 指令把舊資料撈出來匯出
方便之後檢查時對照
3. 執行以下 SQL 語法
UPDATE files AS f INNER JOIN files_ch_name AS c ON f.filename = c.cnid SET f.filename = c.real_name
4. 檢查下載檔名是否正常
5. 如果下載檔名都正常了,就可以把舊版的資料表 files_ch_name 資料表移除

vincnet0228@drupaltaiwan.org 的照片

Re: Upload_ch

感謝前輩~~

RUN了指令後果然就恢復正常了

讓我鬆了一口氣 ^^

大魔王 的照片

Re: Upload_ch

想詢問研究了一下upload模組的建立資料表的部份~然後有一問題~像upload所建立的fid欄位它並不是自動dauto_increment
想詢問它是根據去join files資料表中的fid嘛~

/**
* Implementation of hook_schema().
*/
function upload_schema() {
$schema['upload'] = array(
'description' => 'Stores uploaded file information and table associations.',
'fields' => array(
'fid' => array(
'type' => 'int',
'unsigned' => TRUE,
'not null' => TRUE,
'default' => 0,
'description' => 'Primary Key: The {files}.fid.',
),

hom 的照片

Re: Upload_ch

你可以看到 upload.fid 的欄位說明:
'description' => 'Primary Key: The {files}.fid.',
也就是 fid 其實是對應 files.fid
在 files 資料表裡的 fid 才會 auto_increment
所以在 upload 資料表裡的 fid 當然不可能也用 auto_increment

大魔王 的照片

Re: Upload_ch

嗯~所以其實像模組的一些關聯資料表等等~他會附上相關的欄位說明~
謝謝hom的說明

因為在想另外於別的系統中寫入資料到upload的資料表中~
但是發覺它的fid的部份是於file資料表中去auto_increment

RSS feed