本網誌記錄網站設計的一些內容筆記。 網站設計需要整合很多工具與概念。 我畢業自淡江電子計算機科學學系,算是科班出身。但我們那個年代(50年代,唉!LKK了!),網路還只是剛開始,相關的技術都是出社會以後陸續接觸學習。 網站的建立與設計,牽涉的範圍真的很廣泛。 網站的目地是甚麼?銷售網頁、電子購物、廣告、社群經營、互動、教學、客戶服務、網站應用程式、...... 需要整合的人才,程式設計師、資料庫管理師、網頁美編、文字編輯、多媒體製作等等。 這裡將記錄一個LKK對網站系統重新學習與複習,還有教學使用的一些資料。
2014年8月15日 星期五
CCS fileupload 中文檔名檔案上傳下載的問題
CCS 內附有一個物件:FileUpload,可以用來處理檔案上傳的問題。可是,經過筆者實際使用過,發現就跟 php 一樣,中文檔名會有很大的問題。
html/php 中處理檔案上傳的程序是:
1. html 的 <form ...><input type=file..> <input type=summit...>這是給使用者選擇上傳檔案的介面
2. 使用者選擇檔案後,瀏覽器傳回一個檔案格式回伺服器,放在一個伺服器指定的 tmp 目錄裡,副檔名應該是 .tmp 的。然後,這些檔案資訊就放在 $_FILE['file']陣列裡面(name, size, tmp_name..等)
3. 程式設計者必須再使用 move_uploaded_file() 將 tmp 檔案搬移到設計者指定的上傳目錄及檔案名稱。
4. 完成。
然而, CodeCharge的做法,基本上當然是循 html/php 的方式,但是,又稍微多此一舉一下。
CodeCharge 是這樣做的:
1. 在頁面上加入一個 FileUpload Control,自動產生需要的 html 以及相關的 Property、物件。
2. 只要填寫這個物件的屬性上去,就可以用了。包括:指定 temporary Folder , File Folder等。
3. 完成
這樣很簡單,對吧!這就是 CodeCharge 的優點。但是...
如果是英文檔名,這些都沒有問題。但中文檔名就有問題了!
主要的問題,還是在中文檔名無法經過 move_uploaded_file()
原本想說可以使用 Event 來攔截中文檔名,將之改為英數字檔名,然後中文檔名就記錄在資料庫中。
一直試了都失敗。 Before Process File / Before Show 兩個 EVENT 最有可能可以用,但是都不行!
後來,直接去研究 Code Charge 裡面 Class.php 關於 Fileupload 的程式碼發現,Code Charge 的處理,他是這樣的:
1. html/php 前端這裡跟前面一樣。
2. 使用者瀏覽了檔案,按了確定以後,CodeCharge 就直接處理到了自動加上一個日期時間序號的前置編碼在原檔名前面,然後就直接將 tmp move_uploaded_file 到 指定的 Temporary Folder,
3. 然後,再 MOVE 到 指定的 Folder 中
4. 所謂的 before process File,是指在這個 MOVE 之前的動作,而不是在 move_uploaded_file()之前。難怪不管我怎樣修改檔名為英數字都還是無效。
最後,我只好捨棄使用 CodeCharge的 FileUpload Control,而是直接寫 php 的程式!
Code Charge 的優勢還是在資料庫部分,Record / Grid / Editable Grid 等。
我就直接運用一個 Editable Grid 來顯示 上傳的檔案,加上聯結,當然使用者看到的是原始中文檔名,而實際上伺服器端放的是我修改過的英數字檔名,當使用者點擊該中文檔名的連結,就再呼叫 download.php 程式,將 英數字檔名,以及 原始中文檔名 傳給他,實際上傳的檔案是 後端的英數字檔案,而下載的檔案名稱去原始的中文檔名。
這樣問題就解決了。
訂閱:
張貼留言 (Atom)
如何判斷現在FORM是在 insert mode? 還是 update mode?
只要用 if (empty({primary_key})) 就可以知道是否為新增模式了。 如果 {promary_key} 是空白的,那麼就是在新增模式;反之,就是更新模式。 以上。
-
讓 PHP 接收 post 的 json 資料 - 8月 02, 2013 我們在串接API的時候會用到 CURL 函式 POST 資料給 JSON 接收,雖然我們是使用 POST 傳出資料。但是我們在接收的 SERVER 端使用 $_POST 卻抓不到任何資料。 原來 ...
-
分享:網站上 http://shuai.be/archives/php-undefined-index/ 平時用 $_GET[ ‘ xx ’ ] 取得參數值時,如果之前不加判斷在未傳進參數時會出現這樣的警告 : PHP Notice: undefined i...
-
Note that it's ultimately the responsibility of the server admin to ensure his system is secure. These are some basic security tips tha...
沒有留言:
張貼留言