LENDIEN聯電 冷暖 清淨 除溼 移動式空調 9000BTU任天堂-Switch-NS-公司貨主機-豪華全配組LG樂金 WIFI遠控雙眼小精靈掃地清潔機器人變頻版

2011年6月15日 星期三

swfupload

吃驚的發現這裡竟然整個5月都沒有新東西,快快上來補個KM。。。。。。

今天要介紹的是一個在網頁上好用的檔案上傳工具,叫做swfupload,看名字就知道他跟flash有關係,沒錯!!他就是一個用flash做的上傳工具,先來講他的功能跟特色。

簡單的說有幾點:
1.可以自己設定一次傳一個檔案,還是一次傳多個檔案
2.可以限定一個或多個可上傳的檔案型態,當然要不限定也是可以,比較常見的應用可能是限定上傳jpg,jpeg檔。當然,檔案型態的判別是用windows預設的識別方式-副檔名,這點有點可惜,不過沒辦法,M$就是不用mimetype辨識也打不到他
3.可以限定上傳的檔案大小、數量。這個應該也常用到,除了因為大部份ICP不會給你無止盡的使用空間外,台灣的寬頻水準也不容許你暢快的愛傳多大就傳多大
4.上傳檔案不換頁,可以一邊上傳一邊看上傳進度。所以這樣就不會發生使用者上傳時盯著白白的畫面發呆,或是看一個上傳中的gif檔也不知道到底傳完沒(誰中槍?)
5.一次傳一堆時可以知道哪個檔案傳成功,哪個檔案傳失敗,不會發生一個失敗,等於全部失敗的慘劇

使用上也相當簡單,在download的頁面下載最新版本的sample檔,解壓縮後,在demos的目錄裡面,依應用模式分了好幾個資料夾,找一個中意的,把他放到網頁上就對了!

拿我用的simpledemo版本來說,這個資料夾裡有index.php跟upload.php兩個檔。index.php是上傳介面,把這頁裡上傳的那塊完完整整的摳到我的頁面裡要用的位置,然後把upload.php、images資料夾、js資料夾放到同一個目錄裡,再摳一下他的css檔,最後在upload.php裡加上儲存檔案的php程式碼,這樣基本上上傳功能就做完了,啊哈哈哈好簡單!

好的,到這裡是基本功能,現在開始講一點進階的。
首先,這個範例的按鈕有點醜,所以我去摳了他的XPButtonNoText_61x22.png來當我的按鈕樣式放到images資料夾裡,然後在設定的地方,button_image_url改成XPButtonNoText_61x22.png,button_width、button_height也跟著改成適當的size。
file_types設定成限制網頁能直接顯示的圖片*.png;*.jpg;*.gif;*.swf,多個檔案類型指定時,用分號隔開。
file_post_name改成我自己的名稱,這個會影嚮到upload.php裡要用什麼名稱接收,如果file_post_name設abcde,upload.php裡就用$_FILES["abcde"]來接收
file_upload_limit改成20,表示一次最多只能上傳20個檔案,必竟我不是用在相簿管理……
然後我改成選完檔案不要直接上傳,而是等按了我自己的確定按鈕才能傳。在handlers.js裡的fileDialogComplete,把this.startUpload()拿掉,然後在我的確定按鈕下swfu.startUpload()
最後呢,我還把他的顯示訊息中文化了。。。在handlers.js裡面,所有progress.setStatus開頭的部份

改好上傳測試,一次OK,簡單到不能再簡單的了
忽然覺得這年代寫程式的人越來越不值錢了,因為大家都好愛供獻好用工具
正所謂google搜尋學得好,做好網頁沒煩惱XD

6 則留言:

  1. 您好
    我想請問要接收simpledemo裡的檔案
    我照你說的加了file_post_name
    file_post_name:"files",
    跟在 upload.php 裡加上
    if( isset($_FILES["files"]) )
    echo "檔案上傳成功";
    可是網頁仍沒有印出來
    請問可以幫我看看問題在哪嗎
    我把檔案放在這網址
    140.130.175.37/www.rar
    感激不盡~~

    回覆刪除
  2. 我看了你的程式,看起來是沒有錯誤,建議做個簡單的測試
    首先,確認upload.php可以正常執行,沒有語法錯誤
    再來,加上把上傳檔儲存的程式段,以確認他有確實接收到檔案並存檔
    最後,upload.php這支做echo其實是沒有實質用處的,因為他是給flash後端呼叫的,不做畫面輸出
    檔案上傳後要顯示什麼訊息,全在handlers.js裡做設定

    回覆刪除
  3. 您好 感謝你的回答
    我的問題解決了
    不過我發現他沒辦法上傳中文檔名
    還有自動上傳的問題
    不過這問題不急著解決

    如果大大還有空的話
    希望能發一下這兩個問題的教學文
    3Q~~~~

    回覆刪除
  4. 中文檔名的話我就沒研究了,因為我都習慣把檔名改英文再丟,必竟作業系統不是台灣人設計的,中文檔名不保證絕對沒問題,由其是linux系統……

    自動上傳的話不知道你遇到什麼樣的問題,如果是要改成「不自動上傳」的話,這篇教學文的最後已經有提到了,可以試試

    回覆刪除
  5. 您好
    因為您只說把this.startUpload()拿掉,
    然後在我的確定按鈕下swfu.startUpload()

    我把this.startUpload()註解掉了
    可是我不懂swfu.startUpload()這句話是什麼意思

    回覆刪除
  6. swfu是這個元件顯示在網頁上預設的物件名稱
    你看選取檔案那頁的程式碼,一開始的那串javascript裡,有一行是「swfu = new SWFUpload(settings)」,而swfu.startUpload()就是去呼叫swfu這個物件的startUpload函數

    回覆刪除