前言:
最近在開發一個 HTML 上傳檔案的 form, 類似 gmail 的界面, 可以在同一個畫面裡, 透過 flash 上傳多筆的附件檔案.
這次的遇到的問題是, 我在畫面中使用了2個 swfupload 物件, 一個要上傳附件, 一個要上傳多媒體檔案, 上傳多媒體檔案時, 無法讓檔案上傳, 可是上傳附件的部份都ok.
* 附註:上傳多媒體檔案的方式是透過 jQuery 的 blockUI plugin 彈出一個 dialog:
說明: 這個彈出的方式, 比較特別, 是先選取檔案, 等使用者按下 "上傳"按鈕, 才開始上傳資料.
debug swfupload 的 message 如下:
假設, 是因為放了2個 swfupload object 造成的沖衝. 我的除錯流程如下:
挑戰解法 1, 增加一個新的區塊, 把這種"確定後才開始上傳" 的範例用的程式都放到新的區塊. 測試結果, 是ok的. 測試的範例, 可以2段式的, 按下確定後, 才開始上傳.
挑戰解法 2. 移掉 附件在用的 swfupload object, 讓畫面只剩下 上傳多媒體用的 swfupload object, 結果,還是不能 work.
所以, 這一個假設, 應該不成立, 於是比較看看目前的顯示方式, 與"確定後才開始上傳" 的範例的差異, 假設要存取 user client 端的資料時, swfupload 必需是 visible(也許看的到), 結果可行, 似乎是安全性造成的.
結果: flash 上傳元件的限制, 就是 user 要開始上傳 client 端資料時的一瞬間, swfupload object 需要要顯示在畫面裡可能被看的見的區塊裡, 用 "一瞬間" 的意思指, 原本隱藏的區塊, 在 "選取" 檔案時, 和 "開始上傳時" 這2個時間點, 都顯示在畫面上, 是可以上傳成功的.
* 附註: 當 user 選好 client 端的檔案後, "可能" 不能對這一個 flash object 做搬移區塊的動作. 搬了的話會造成 flash UI 的重新整理, 也會造成無法上傳檔案. 會用 "可能", 是指我的手法可能太遜, 搬失敗, 可能有其他的方法, 可以正常地去搬移 flash object 的位置, 而且還可以正常的上傳, 這個部份先跳過...
相關文章:
swfupload Document:
http://demo.swfupload.org/Documentation/#startUpload
swfupload project:
http://code.google.com/p/swfupload/
後記: 原來是 blockUI 裡的 bindEvents, 把事件吃掉..., 我最後的解法是 bindEvents: false, 然後再把 flash 放在一個奇怪的 position:absolute;z-index:9999; left:-100px; top:-50px; 的 layer 裡, 應該可以有更好的解法 XD
沒有留言:
張貼留言