2012
Dec
05

YUI 的檔案上傳,必需 require uploader 這個 module,也就是使用 YUI().use('uploader'),這個 module 有提供「單一檔案選擇」、「多個檔案選擇」、「檔案傳輸」、「進度條」等資訊。

為了完成多個檔案選擇的功能,YUI 會自動 include HTML5Flash 這兩個 YUI Module ,如果你使用的 Browser 有HTML5 的功能,那 YUI 就會使用 HTML5 來實做檔案上傳的功能,若是你的 Browser 沒辦法執行 HTML5 的功能,YUI 就會使用 Flash 來實做檔案上傳,所以從 IE6 以上的 Browser 都可以使用這個 uploader。

YUI uploader 雖然有提供很多資訊,但是沒有提供 UI 介面,所以我實做一個有進度條上傳檔案的 yFileUploader Module。

上傳按鈕的範例 (選取一個 1MB 左右的檔案,就可以比較清楚的看到上傳進度條)

程式原始碼

第一步是先定義 html tag ,必需給一個按鈕的 div 與 進度條的 div ,我分別各給一個 id: btn , progressBar。

定義上傳按鈕與進度條要出現的 HTML Tag
  1. <div id="uploaderDemo" style="width:300px;margin:0 auto;">
  2. <div id="btn"></div>
  3. <div id="progressBar" ></div>
  4. </div>

接著 New FileUploader ,必指定按鈕與進度條的尺寸,最後要指定一個伺服器接收檔案的 url ,我的範例因為不會真的把檔案傳到伺服器,所以指定一個存在的 html 即可(做假!!)。

New and Render FileUploader button
  1. <script src="http://yui.yahooapis.com/3.7.3/build/yui/yui-min.js"></script>
  2. <script src="/filemanage/blog_files/yFileLoader.js"></script>
  3. <script>
  4. YUI().use("node","yFileUploader" , function(Y){
  5. if (Y.Uploader.TYPE != "none" && !Y.UA.ios) {
  6. var url = "/filemanage/blog_files/yFileLoader.js";//server url
  7. fileUploader = new Y.yFileUploader({
  8. width: "275px",
  9. height: "35px",
  10. progressBarWidth:270,
  11. progressBarHeight:25,
  12. progressBarContainer:"#uploaderDemo #progressBar",
  13. multipleFiles: false,
  14. swfURL: "http://yui.yahooapis.com/3.7.3/build/uploader/assets/flashuploader.swf?t=" + Math.random(),
  15. uploadURL: url,
  16. simLimit: 1,
  17. withCredentials: false,
  18. selectButtonLabel:"上傳檔案",
  19. container:"#uploaderDemo #btn"
  20. });
  21. fileUploader.render("#uploaderDemo #btn");
  22. }
  23. });
  24. </script>

程式下載


回應 (Leave a comment)