使用webUploader上傳圖片(用js觸發(fā)選擇圖片)

webuploader的優(yōu)點是幾乎支持所有的平臺坝疼,pc端支持ie6+仰担,支持IOS和Android,它可以自動壓縮圖片(僅支持jpeg吹零,在某些參數設置下用肉眼不能看出壓縮之后的差別席函,最多可縮小60倍)炮姨,生成base64地址編碼,能根據平臺自動切換flash或H5上傳如庭。

通常情況下叹卷,需要給一個特定div綁定一個onclick事件,當然這些都是webUploader內部完成的坪它。先看主要代碼:

var server = r.host;
        var swf = 'http://cdn.staticfile.org/webuploader/0.1.0/Uploader.swf';
        var object = '';
        var base64Src = '';

        var uploader = WebUploader.create({
            auto: true,
            swf: swf,
            server: server,
            pick: domId,
            duplicate:true,
            compress:{
                width: 800,
                height: 800,
                quality: 90,
                allowMagnify: false,
                crop: false,
                preserveHeaders: true,
                noCompressIfLarger: false,
                compressSize: 50
            },
            thumb:{
                width: 800,
                height: 800,
                quality: 70,
                allowMagnify: true,
                crop:false,
                type: 'image/jpeg'
            },
            accept: {
                title: 'Images',
                extensions: 'gif,jpg,jpeg,bmp,png',
                mimeTypes: 'image/jpg,image/jpeg,image/png'
            }
        });

        uploader.on( 'fileQueued', function( file ) {
            var loading = layer.load(2);

            uploader.makeThumb( file, function( error, src ) {
                if ( error ) {
                    alert('不能預覽');
                    layer.close(loading);
                }else{
                    base64Src = src;
                    previewCallback(src);
                    layer.close(loading);
                }
            });
        });

        uploader.on('uploadBeforeSend', function (obj, data, headers) {
            delete r.host;

            data = $.extend(data,r);
            data.key = object = data.key + '/' + uuid(16) + '.jpg';

            headers['Access-Control-Allow-Origin'] = "*";
        });

        uploader.on( 'uploadSuccess', function( file,response ) {
            $.post(bao.dealWithObject,{object:object},function(r){
                if(r.code == 1){
                    setCallback(r.data);//image_id
                    mergeCallback(base64Src, r.data);
                }
            });
        });

        uploader.on( 'uploadError', function( file ) {
            alert('上傳圖片失敗骤竹,請重試');
        });

看以看到,webUploader把選擇往毡、預覽蒙揣、上傳幾個步驟分開了,要分別寫到不同的函數里卖擅。這里有一個技巧鸣奔,就是預覽和上傳分開墨技,這樣用戶看到圖片的速度會很更快惩阶,而圖片在另一個函數里異步上傳,用戶是沒有感知的扣汪。

webUploader如果能結合OSS或者7牛断楷,可以直接把圖片上傳到圖片服務器,將不會占用應用服務器的貸款和性能崭别。

這需要一個驗簽過程冬筒,具體辦法是每次上傳的時候去應用服務器取得簽名,然后作為參數和圖片一起上傳到圖片服務器茅主。關鍵代碼:

$.post(signatureUrl,{},function(r){
    if(r.code === 0){
        alert(r.msg);
    }else{
        var signature = {
            'key' : r.dir,
            'policy': r.policy,
            'OSSAccessKeyId': r.accessid,
            'success_action_status' : '200',
            'signature': r.signature,
            'host': r.host
        };
        callback(signature);
    }
});

可能不同的服務商代碼不太一樣舞痰,原理是相似的。這里也有一些技巧诀姚,比如把緩存時間設置成一個可接受的值响牛,在一段時間內不用重復取值。

最后赫段,有時候我們不想把選擇圖片的動作綁定到一個div上呀打,或者我們上傳的代碼已經寫好,只需要重構就可以了糯笙,這個時候我們需要用js觸發(fā)上傳圖片的動作贬丛。

嘗試過調用picker下的div,沒有作用给涕,也去github上提過issues豺憔,但是沒有回應额获。無意中發(fā)現(xiàn)可以這樣解決:

<button onclick='trigger()'>trigger</button>
<button id="picker" style="display:hone">picker</button>
<script>
var uploader = WebUploader.create({
    auto: true,
    swf: swf,
    server: server,
    pick: '#picker'
});
function trigger(){
    $('#picker').find('input').click();
}
</script>

這樣就可以觸發(fā)選擇圖片的動作了,也就是說恭应,可以用js觸發(fā)咪啡,但是,總得有鼠標點一下暮屡。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末撤摸,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子褒纲,更是在濱河造成了極大的恐慌准夷,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,372評論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件莺掠,死亡現(xiàn)場離奇詭異衫嵌,居然都是意外死亡,警方通過查閱死者的電腦和手機彻秆,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評論 3 392
  • 文/潘曉璐 我一進店門楔绞,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人唇兑,你說我怎么就攤上這事酒朵。” “怎么了扎附?”我有些...
    開封第一講書人閱讀 162,415評論 0 353
  • 文/不壞的土叔 我叫張陵蔫耽,是天一觀的道長。 經常有香客問我留夜,道長匙铡,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,157評論 1 292
  • 正文 為了忘掉前任碍粥,我火速辦了婚禮鳖眼,結果婚禮上,老公的妹妹穿的比我還像新娘嚼摩。我一直安慰自己钦讳,他們只是感情好,可當我...
    茶點故事閱讀 67,171評論 6 388
  • 文/花漫 我一把揭開白布低斋。 她就那樣靜靜地躺著蜂厅,像睡著了一般。 火紅的嫁衣襯著肌膚如雪膊畴。 梳的紋絲不亂的頭發(fā)上掘猿,一...
    開封第一講書人閱讀 51,125評論 1 297
  • 那天,我揣著相機與錄音唇跨,去河邊找鬼。 笑死,一個胖子當著我的面吹牛玛痊,可吹牛的內容都是我干的捅僵。 我是一名探鬼主播谍夭,決...
    沈念sama閱讀 40,028評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起狮惜,我...
    開封第一講書人閱讀 38,887評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎碌识,沒想到半個月后碾篡,有當地人在樹林里發(fā)現(xiàn)了一具尸體,經...
    沈念sama閱讀 45,310評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡筏餐,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,533評論 2 332
  • 正文 我和宋清朗相戀三年开泽,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片魁瞪。...
    茶點故事閱讀 39,690評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡穆律,死狀恐怖,靈堂內的尸體忽然破棺而出导俘,到底是詐尸還是另有隱情峦耘,我是刑警寧澤,帶...
    沈念sama閱讀 35,411評論 5 343
  • 正文 年R本政府宣布趟畏,位于F島的核電站贡歧,受9級特大地震影響滩租,放射性物質發(fā)生泄漏赋秀。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,004評論 3 325
  • 文/蒙蒙 一律想、第九天 我趴在偏房一處隱蔽的房頂上張望猎莲。 院中可真熱鬧,春花似錦技即、人聲如沸著洼。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽身笤。三九已至,卻和暖如春葵陵,著一層夾襖步出監(jiān)牢的瞬間液荸,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,812評論 1 268
  • 我被黑心中介騙來泰國打工脱篙, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留娇钱,地道東北人伤柄。 一個月前我還...
    沈念sama閱讀 47,693評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像文搂,于是被迫代替她去往敵國和親适刀。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,577評論 2 353

推薦閱讀更多精彩內容

  • 發(fā)現(xiàn) 關注 消息 iOS 第三方庫煤蹭、插件笔喉、知名博客總結 作者大灰狼的小綿羊哥哥關注 2017.06.26 09:4...
    肇東周閱讀 12,093評論 4 62
  • 小宇說:最愛王石。 非常高興硝皂,也非常,感覺非常特別然遏。即將過去的2016年,和大家在這里共祝吧彪,從大家的呼聲當中呢待侵,感...
    燕飛宇閱讀 948評論 0 1
  • 阿金與妻商量決定:明天(2015年3月22日)接老家?guī)X下親房的老弟和弟媳們到縣城來歡聚歡聚,喝喝酒水姨裸,以表親房眾弟...
    鎮(zhèn)南方良金閱讀 107評論 0 1