1. 程式人生 > >Web Uploader專案實戰中遇到的諸多坑

Web Uploader專案實戰中遇到的諸多坑

WebUploader是由Baidu WebFE(FEX)團隊開發的一個簡單的以HTML5為主,FLASH為輔的現代檔案上傳元件,比較好用,相容性也比較好;官方文件
廢話不多說,直接討論在專案中遇到的種種坑吧。

1.在一個html頁面有未知個地方需要上傳圖片;

var uploader = WebUploader.create({

    // swf檔案路徑
    swf: BASE_URL + '/js/Uploader.swf',

    // 檔案接收服務端。
    server: 'http://webuploader.duapp.com/server/fileupload.php',

    // 選擇檔案的按鈕。可選。
// 內部根據當前執行是建立,可能是input元素,也可能是flash. pick: '#picker', // 不壓縮image, 預設如果是jpeg,檔案上傳前會壓縮一把再上傳! resize: false });

官方文件初始化uploader 物件是這樣的,#picker就是頁面上需呼叫上傳元件的Id,假如有1~3個,也許可以將上面的程式碼寫上3遍,只要你不嫌麻煩,但是要碰到10個,用這種方法就有點想哭的衝動了,後來就想到下面的方法,每次重新例項化一個uploader物件,並且把需要呼叫上傳元件的控制元件Id傳遞過去;

function uploader
(domId){
// swf檔案路徑 swf: BASE_URL + '/js/Uploader.swf', // 檔案接收服務端。 server: 'http://webuploader.duapp.com/server/fileupload.php', // 選擇檔案的按鈕。可選。 // 內部根據當前執行是建立,可能是input元素,也可能是flash. pick: '#'+domId, // 不壓縮image, 預設如果是jpeg,檔案上傳前會壓縮一把再上傳! resize: false return uploader; }

假如你需要上傳的控制元件都是動態生成的,這種情況你可以以隨機數設定控制元件Id的屬性,類似於;

 uploader("_upload_button_"+randomNum);

randomNum是一個隨機數;這樣的話,不管頁面有多少個需要上傳的控制元件都可以呼叫上傳圖片的元件啦。

2. fileQueued與filesQueued事件的區別

假如上傳的圖片放在一個佇列裡面,fileQueued事件是每有圖片新增到佇列裡面都會執行的,在這個事件裡面,可以處理圖片數量的疊加、圖片縮圖html的拼接;而filesQueued是在圖片選擇完後執行的,這個事件裡可以將之前拼接好的Html以某種形式展示,我在專案中使用的是artDialog彈框元件,參照文件連結

3. 移除上傳佇列裡面的圖片

好不容易將選擇圖片、圖片上傳弄好了,這時候產品過來跟你說,待上傳的圖片佇列裡面的圖片,需要支援選擇性的刪除,坑啊 ;這時候,可以呼叫fileDequeued事件

 uploader.on('fileDequeued', function(file){

        fileCount--;
        removeFile(file);

    });

4. 待上傳的圖片佇列裡支援重新選擇圖片上傳

假如你選擇了幾張圖片等待上傳,或者已經上傳完了幾張,在不關閉彈窗元件的前提下,想繼續新增圖片上傳,可以呼叫下面程式碼;

// 新增“新增檔案”的按鈕,
   uploader.addButton({
         id: '#continueUpload',
         label: '繼續上傳'
     });
上面id是需要呼叫上傳元件的控制元件的id,這樣的話,又可以繼續嗨皮的上傳圖片啦。

相關推薦

Web Uploader專案實戰遇到的

WebUploader是由Baidu WebFE(FEX)團隊開發的一個簡單的以HTML5為主,FLASH為輔的現代檔案上傳元件,比較好用,相容性也比較好;官方文件 廢話不多說,直接討論在專案中遇到的種種坑吧。 1.在一個html頁面有未知個地方需要上傳圖片

[專案實踐] 在專案實戰提升程式碼效率的的一次應用實踐-----使用列表解析式輸出當前android裝置的CPU核數

1、先按照初學者思維程式碼應該是這樣的 1 #coding:utf-8 2 import os 3 text = os.popen("adb shell command cat /proc/cpuinfo",'r').read().split("\n") 4 i = 0 5 for j i

WEB測試專案實戰——1.WEB專案測試備戰

專案介紹:B/S架構的web專案 WEB專案測試備戰 目錄 一、實戰路線圖 (一)研發模型——瀑布模型 (二)測試遵循的原則——W原則 (三)專案實戰課程路線圖 前期準備-需求評審-設計評審-測試計劃-測試架構

WEB測試專案實戰——3.測試

專案背景:禪道公司把禪道專案管理系統外包給我們WEB測試小組 1.只提供安裝包 2.專案測試時間為兩個月 3.專案為離岸外包(禪道公司把安裝包給我們,我們內部進行測試,而不是我們派人到他們公司去) 一、為什麼要編寫測試計劃 1.領導能夠根據測試計劃做巨集觀

WEB測試專案實戰——10.介面測試

一、導航 【導航】描述了使用者在一個頁面內的操作方式 導航的另一個重要方面是web應用系統的頁面結構、導航、選單、連線的風格是否一致 二、圖形 (1)要確保圖形有明確的用途,圖片和動畫不要胡亂的堆在一起,以免浪費傳輸時間,web應用系統的圖片尺寸要儘量的小,並且

Android Handler訊息機制疑問

前言 網上總是有很多闡述Android訊息機制的文章,基本上大同小異,都是講Handle,Message,Looper,MessageQueue這四個類會如何協同工作的。但是動腦筋的童鞋們可能總是會有如下的一些疑問,我翻閱了數多微博,很多年了,也沒有看到相關比較

Mysql學習總結(65)——專案實戰常用SQL實踐總結

(1)負向條件查詢不能使用索引 select  x1, x2 from order where status!=0 and stauts!=1 not in/not exists都不是好習慣 可以優化為in查詢: select x1, x2 from order whe

vue專案實戰的增、刪、改、查

現在公司專案是做的後臺管理系統,那麼無疑要用到增、刪、改、查。其實實戰裡的增刪改查都要呼叫介面,傳遞引數,而很多的dom操作都反而不需要了。 vue有個很關鍵的詞對增刪改查很重要,叫做雙向資料繫結。因為你需要不斷的傳參,傳值,接收id,原生DOM的操作能不用就不用,耗效能,

專案實戰如何使用抽象類和介面

引子: 時常會有這麼一個疑惑,抽象類和介面功能好像,真正用起來該如何抉擇呢?? 好問題。。 來看看書上怎麼說的(C#7.0本質論) 雖然方法可在基類中宣告為抽象成員,但是!!如果都從一個基類派生,會用掉唯一的基類機會,(什麼意思呢:也就是C#的單繼承特性了),所以,什麼都往基類裡面加,就會顯得特別臃腫

vue專案開發踩過的

一、路由 這兩天移動端的同事在研究vue,跟我說看著我的專案做的,子路由訪問的時候是空白的,我第一反應是,不會模組沒載入進來吧,還是。。。。此處省略一千字。。。 廢話不多說上程式碼 路由程式碼 { path: '/list', name: '列表', component:

專案過程遇到的那些

佈局分析圖 首先寫公共類BasePager,在構造方法呼叫initView( )初始化view,該view是幾個子pager共有的比如標題欄,側滑的點選按鈕,還有initData()初始化資料;當孩子需要初始化資料;或者繫結資料;聯網請求資料並且繫結的時候

【SSH網上商城專案實戰24】Struts2如何處理個Model請求

    1. 問題的提出   Struts2中如果實現了ModelDriven<model>介面

在Java Web專案引入Mondrian維分析框架

本文完全轉載自:http://www.linuxidc.com/Linux/2014-09/107008.htm 我也是初學,為了方便以後檢視,所以轉到自己部落格上了。 -------------------------------------------------------------

Spark專案實戰-實際專案常見的優化點-分配更的資源和調節並行度

1、分配更多的資源 (1)分配哪些資源?executor、cpu per executor、memory per executor、driver memory。 (2)在哪裡分配這些資源?在我們在生產環境中,提交spark作業時,用的spark-submit shell指

如何在WinForm專案呼叫DirectX問題解決方案彙總!

最近想在WinForm上呼叫Directx來渲染繪圖,結果遇到了以下這些問題,經過一段時間的嘗試這些問題已經得到解決,特此與大家一起分享以下經驗!首先我們來講講整個的正常思路,最後會在下面講解在呼叫Directx過程中出現的一些問題及其解決方案!筆者的電腦及其開發的相關環境:

IDEA建立Web聚合專案(Maven模組專案)

1、建立parent專案 2、建立子模組 3、這樣一個project就建立好了,刪除沒有用的src 4、當前結構 5、這個時候建立的不管是child1還是child2都是普通的Java專案,而不是JavaWeb專案,在一個JavaWeb專案中,我們的模組可能分為

IntelliJ IDEA建立Web聚合專案(Maven模組專案)

Eclipse用多了,IntelliJ中建立Maven聚合專案可能有小夥伴還不太熟悉,我們今天就來看看。 IntelliJ中建立普通的Java聚合專案相對來說比較容易,不會涉及到web操作,涉及到web的話會有一點點麻煩。我們來一步一步看下。 環境:In

IntelliJ IDEA建立Web聚合專案(Maven模組專案)詳細版本!!

Eclipse用多了,IntelliJ中建立Maven聚合專案可能有小夥伴還不太熟悉,我們今天就來看看。 IntelliJ中建立普通的Java聚合專案相對來說比較容易,不會涉及到web操作,涉及到web的話會有一點點麻煩。我們來一步一步看下。環境:IntelliJ IDEA

JAVA架構師大型分散式高併發電商專案實戰,效能優化,叢集,億級高併發,web安全,快取架構實戰

現任58到家技術委員會主席,高階技術總監,負責企業,支付,營銷、客戶關係等多個後端業務部門。本質,技術人一枚。網際網路架構技術專家,“架構師之路”公眾號作者。曾任百度高階工程師,58同城高階架構師,58同城技術委員會主席,58同城C2C技術部負責人。 內容介紹 1.大資

製作網路爬蟲遇到的問題及解決方案

def getsourse(self,url): html=requests.get(url) html.encoding='utf-8' return html.text 關於html檔案轉text格式因為uft-8而出現亂碼的問